luaMetatable(元表)

元表的定义

元表--通俗理解:对普通表做一些行为上的拓展

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
原文地址:https://www.cnblogs.com/hhs1998/p/15732880.html