LUA教程Metatables and Metamethods-51

Metatables允许我们改变table的行为,例如,使用Metatables我们可以定义Lua如何计算两个table的相加操作a+b。当Lua试图对两个表进行相加时,他会检查两个表是否有一个表有Metatable,并且检查Metatable是否有__add域。如果找到则调用这个__add函数(所谓的Metamethod)去计算结果。

Lua中的每一个表都有其Metatable。(后面我们将看到userdata也有Metatable),Lua默认创建一个不带metatable的新表

t = {}
print(getmetatable(t))      --> nil

可以使用setmetatable函数设置或者改变一个表的metatable

t1 = {}
setmetatable(t, t1)
assert(getmetatable(t) == t1)

任何一个表都可以是其他一个表的metatable,一组相关的表可以共享一个metatable(描述他们共同的行为)。一个表也可以是自身的metatable(描述其私有行为)。


发布日期:

所属分类: 编程 标签:


没有相关文章!