Lua Record 1
👾
元表 Metatable
是普通表基础之上扩展的,有很多元方法,为表添加操作符
打印 a 只会输出 类型和地址
两个重要的函数
请留意: Lua数组中,下标是从[1]开始
setmetatable(table,metatable): 对指定 table 设置元表(metatable),如果元表(metatable)中存在 __metatable 键值,setmetatable 会失败
__metatable👇
一个Meta表只能作为一个普通表的Meta表
getmetatable(table): 返回对象的元表(metatable)
__index
用于旧表的扩展,__index后面可以跟上一个表或者一个函数
1 | tabl1 = {"Lua","C++","Java","C#"} |
运行结果是JavaScript
第二种情况
值得注意的是新表的第4个元素无法替代之前的
总之 __index就是为了处理不存在的索引的时候怎么办
__newindex
为表添加新的键值对的时候会起作用
修改一个存在的数据是不起作用
有三个参数__newindex(经过扩展后的表,键名,值)
1 |
|
👆没有修改表,👇添加了修改表的操作
1 |
|
第二种情况同样后面跟一个表
Lua Record 1