1、Metatable
1)metatable是用来定义一个table的行为的table。
2)table默认行为可以进行遍历,但table不能相加, metatable允许改变默认行为。
3)Lua中每个table都可以有meltable
4)新表默认是不带metatable的
测试:
t = {}
print(getmetatable(t)) --> nil
5)任何表可是其它表的metatable, 一组相关表可以共享一个metatable, 个表也可以是自身的metatable。
测试:
t1= {}
setmetatable(t, t1)
assert(getmetatable(t) == t1)
个人觉得这里很难理解,找到一个详细的博客 http://www.jb51.net/article/56690.htm
2、metamethods用途
Lua为table的metatable提供一组预定义操作函数,
这些函数叫metamethods。 当执行table某些操作的时候,会去寻找table中是否有
这个操作对应的metamethods,如果有执 函数并返 回结果,否则操作报错。
local mt = {}
function mt.__add(a, b)
return 'table + ' .. b
end
local t = {}
setmetatable(t, mt)
print(t + 1)
每个算术操作符有对应的 metamethod: