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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2019-12-27 网络模型及访问过程