metatable的介绍:
Lua的table可以模拟面向对象,都得益于metatable的强大之处。在一个table中,如果索引一个元素未能找到,解释器会去该table下的metatable中的__index元素中去寻找,即table.metatable.__index.xxx中寻找。
但是如果要修改table中的元素或赋值操作,但是该元素不存在,那么会在table中创建该元素,而不会去me...
分类:
其他好文 时间:
2015-03-01 18:34:32
阅读次数:
223
前言元表对应的英文是metatable,元方法是metamethod。我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算。在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了。那这篇...
分类:
其他好文 时间:
2015-02-11 01:46:51
阅读次数:
232
1.-- --metatable 可以作为继承的用法
parent = {
house = 1
}
parent.__index = parent --如果没有这一句话 child即使是设置parent为元表 也不能找到parent中的内容. __index指向的内容是nil
child = {
wife = 2
}
setmetatable(child, parent)...
分类:
Web程序 时间:
2014-12-28 15:38:52
阅读次数:
152
元表为重定义Lua中任意一个对象(值)的默认行为提供了一种公开入口. 如同许多OO语言的操作符重载或方法重载.算术类元方法: 字段:__add __mul __ sub __div __unm __mod __pow (__concat)代码:(两个table相加)下例中mt是元表,__add是元方...
分类:
Web程序 时间:
2014-12-21 17:59:34
阅读次数:
171
MetaTable:为表元素重载操作符__add(a, b) 对应表达式 a + b__sub(a, b) 对应表达式 a - b__mul(a, b) 对应表达式 a * b__div(a, b) 对应表达式 a / ...
分类:
Web程序 时间:
2014-11-25 17:57:25
阅读次数:
172
metatable允许我们改变table的行为 Lua中的每一个表都可以有metatable(后面我们将看到userdata也有Metatable) Lua默认创建一个不带metatable的新表 setmetatable(只能用于table)和 getmetatable(用于任何对象) 可以使用s...
分类:
Web程序 时间:
2014-11-13 12:12:31
阅读次数:
170
元表
metatable:(元表)一组元操作(元方法)的集合;
__index:元方法之一,作用:定义了新的索引操作;
若索引表中没有的key,会去查找表的元方法,即metatable中的__index方法(也可以是另一个表)
原型:__index = fuunction(table,key) --...
分类:
其他好文 时间:
2014-11-11 15:54:40
阅读次数:
282
Lua之metatable一、元表Lua中的每个值都有一套预定义的操作集合,也可以通过metatable(元表)来定义一个值的行为,metatable包含了一组meatmethod(元方法)。Lua中的每个值都有一个metatable,table和userdata可以有各自独立的metatable,...
分类:
Web程序 时间:
2014-10-23 16:08:42
阅读次数:
252
lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能。 lua中提供的元表是用于帮助lua变量完成某些非预定义功能的个性化行为,如两个table的相加,通过让两者指向同一元表并修改该元表的元方法....
分类:
其他好文 时间:
2014-09-25 12:22:38
阅读次数:
193
Lua 中的每个值都可以用一个 metatable。 这个 metatable 就是一个原始的 Lua table , 它用来定义原始值在特定操作下的行为。 你可以通过在 metatable 中的特定域设一些值来改变拥有这个 metatable 的值 的指定操作之行为。 举例来说,当一个非数字的值作...
分类:
其他好文 时间:
2014-09-20 18:29:39
阅读次数:
257