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
复制代码

 

posted @   SiNanhong  阅读(70)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2019-12-27 网络模型及访问过程
点击右上角即可分享
微信分享提示