lua-Metatable(元表)
元表的定义
元表--通俗理解:对普通表做一些行为上的拓展
setmetatable(table,metatable): 对指定 table 设置元表(metatable)
getmetatable(table): 返回对象的元表(metatable)
mytable = {'python','lua','ue4'} mymetatable = {} setmetatable(mytable,mymetatable) --加后者设置为前者的原表。返回值是mytable getmetatable(mytable) -- 获取mytable的元表
注:如果设置好元表,为了保护元表不再被修改可以设置__metatable健
mytable = setmetatable({'python','lua','ue4'},{__metatable = 'lock'}) print(getmetatable(mytable)) --输出:lock
__index 元方法
若访问键没有值,那么就寻找该table的metatable中的__index 键
1.__index包含一个函数,Lua就会调用那个函数,固定参数:table普通表,key不存在的键
other = function(tab,key) --参数固定,tab为普通表,key为不存在的键 return 'one'..key
end t = setmetatable({},{__index = other }) print(t.name) --输出:onename
2. __index包含一个表格,Lua会在表格中查找相应的键
other = { foo = 3 } t = setmetatable({}, { __index = other }) t.foo --输出:3
__newindex 元方法
若给表的一个缺少的索引赋值,那么就寻找该table的metatable中的__newindex 键
mymetatable = {} mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable }) print(mytable.key1) --输出:value1 mytable.newkey = "新值2" print(mytable.newkey,mymetatable.newkey) --输出:nil,新值2 mytable.key1 = "新值1" print(mytable.key1,mymetatable.key1) --输出:新值1,nil