Lua metatable & metamethod
【Lua metatable & metamethod】
Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连接的,但是对于两个table类型,则不能直接进行“+”操作。这需要我们进行一些操作。在Lua中有一个元表,也就是上面说的metatable,我们可以通过元表来修改一个值得行为,使其在面对一个非预定义的操作时执行一个指定的操作。比如,现在有两个table类型的变量a和b,我们可以通过metatable定义如何计算表达式a+b,具体的在Lua中是按照以下步骤进行的:
- 先判断a和b两者之一是否有元表;
- 检查该元表中是否有一个叫__add的字段;
- 如果找到了该字段,就调用该字段对应的值,这个值对应的是一个metamethod;
- 调用__add对应的metamethod计算a和b的值。
Lua在创建新的table时不会创建元表
  
可以使用setmetatable去设置一个table或userdata类型变量的元表
  
在table中,我可以重新定义的元方法有以下几个:
  
参考:http://www.jellythink.com/archives/511
Lua metatable & metamethod的更多相关文章
- lua metatable 和 _index 实验
		lua metatable 和 _index 中文博客解释: http://www.cnblogs.com/simonw/archive/2007/01/17/622032.html metatabl ... 
- lua metatable(元表)
		lua metatable (元表) 概述 普通 table 类型的表仅能够做一些单表操作, 无法进行一些特殊的以及两个表的操作, 比如 table1 + table2, print(table3) ... 
- lua metatable和metamethod元表和元方法
		Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ... 
- Metatable和Metamethod
		Metatable和Metamethod是用来干啥的?它们可以使得表a和b的表达式“a + b”变得有意义,其中metatable使两个不相关的表a和b之间可以进行操作,而操作的具体行为比如说&quo ... 
- Metatable和Metamethod(转)
		Metatable和Metamethod是用来干啥的?它们可以使得表a和b的表达式“a + b”变得有意义,其中metatable使两个不相关的表a和b之间可以进行操作,而操作的具体行为比如说&quo ... 
- lua面向对象封装及元表(metatable)性能测试
		Lua本身是没有面向对象支持的,但面向对象编程在逻辑复杂的大型工程却很有用.于是很多人用Lua本身的数据结构table来模拟面向对象.最简单的一种方法是把对象的方法.成员都放到table中.如: -- ... 
- Lua语言中文手册 转载自网络
		Programming in LuaCopyright ® 2005, Translation Team, www.luachina.net Programming in LuaProgramming ... 
- cc(self)是什么意思?
		分别找到这2句代码: 复制代码 cc(self):addComponent("components.behavior.EventProtocol"):exportMethods ... 
- lua-C++ userdata使用
		lua-C++ userdata使用 所负责的产品使用非常灵活,可设置的参数上千个,而且还支持用户用lua进行流程控制,所以开发中要用到很多lua.C++混合编程.之前对这些也还是一知半解,只会依葫芦 ... 
随机推荐
- TestDisk 恢复rm -rf 的文件
			Linux操作系统下使用TestDisk恢复已删除的文件或目录 原创作者:szyzln/2015.10.16 转载需注明原始出处! 说明: testdisk和photorec是著名的恢复数据,而绝 ... 
- c++代码美化
			int main() if else return 0; int main() if else return 0; int main() if else return 0; int main() if ... 
- valgind使用错误——检测不同位目标程序
			当64位的valgrind工具测试32位的程序时,会报如下错误: ==22235== Memcheck, a memory error detector ==22235== Copyright (C) ... 
- 微信公众平台开发教程(八)Session处理
			微信公众平台开发教程(八)Session处理 在微信窗口,输入的信息有限,我们需要将一些信息分多次请求. 比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名.密码,或者姓名.电话号码,服 ... 
- ios实现屏幕旋转的方法
			1.屏蔽AppDelegate下面的屏幕旋转方法 #pragma mark - 屏幕旋转的 //- (UIInterfaceOrientationMask)application:(UIApplica ... 
- [Tex学习]WinEdit 常用软件快捷键
			WinEdit 常用软件快捷键 编辑: Alt+C:在剪贴板原有复制文本后增加新的被选择的文本. Ctrl+Shift+Alt+Right/Left:对选中文本增加或者删除Comment标记. Ctr ... 
- Spring container vs SpringMVC container(webmvc container)
			Difference between applicationContext.xml and spring-servlet.xml in Spring Framework Scenario 1 In c ... 
- MYSQL C API : struct MYSQL_STMT 结构的组合使用
			#include <iostream> #include <string> #include <string.h> #include <assert.h> ... 
- centos之Haproxy 负载均衡学习笔记
			HAProxy的特点是:1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机:2.能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作3.支持url检测后端的 ... 
- RabbitMQ、Memcache、Redis(队列、缓存)
			RabbitMQ 一.解释 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消 ... 
