在Lua中使用一个表操作另外的一个表的时候就需要用到metatable 1.关联两个表[将表B 设置成表A 的元表],需要用一个新的函数: setmetatable(表A, 表B) 2.getmetatable(表名) 如果表名有元表,就返回元表的类型和地址;如果没有元表,则返回一个nil。 3.__index索引(注意前面是两个_) 设置元表的“__index 索引”,让这个索引指向元表自身,代码如下: 元表名.__index = 元表名 然后我们再使用“表名.键名”的方式访问表内的成员。 比如下面代码中的两个表tableA和tableB,如果表tableA 中没有,就会自动访问表tableB 中的成员。 代码如下:

tableA={str01=”达康书记”,str02=”育良书记”,str03=”小金子”}
tableB={str04=”猴子”,str05=”吴法官”,str06=”齐同伟”}

tableB.__index=tableB

–setmetatable(表A, 表B)
–将tableB设置为tableA的元表
setmetatable(tableA,tableB)

–getmetatable(表名)
–如果表名有元表,就返回元表的类型和地址
–如果没有元表,则返回一个nil
print(getmetatable(tableA))
print(getmetatable(tableB))

print(tableA.str01)
print(tableA.str02)
print(tableA.str03)
print(tableA.str04)
print(tableA.str05)
print(tableA.str06)

结果如下:

>lua -e “io.stdout:setvbuf ‘no’” “temp.lua”
table: 00BE98A8
nil
达康书记
育良书记
小金子
猴子
吴法官
齐同伟

Exit code: 0