Lua 元表变量

我对 Lua 的元表有一些疑问... 这是我的代码:

setmetatable(t1, mb)
setmetatable(t2, mb)
print("t1:", getmetatable(t1))
print("t2:", getmetatable(t2))
mb.__index = mb

print(t1.a)
t1.a = 2
print(t2.a)
mb.a = 3
print(t1.a)
print(t2.a)

这是输出结果:

t1:     table: 00D62D88
t2:     table: 00D62D88
1
1
2
3

输出结果表明 t1 和 t2 有相同的元表 mb(相同的地址),我认为 t1.a 和 t2.a 是 mb.a,它们是同一个变量。 但是当给 t1.a 赋一个新值时,t2.a 不变,当给 mb.a 赋一个新值时,t3 改变了! 有谁能解释一下发生了什么吗?

点赞
用户107090
用户107090

这就是 __index 的工作原理。

如果表 t 有一个元表 m,其中包含一个 _index 项,指向表 s,那么当 t.a 为空时,读取 t.a 就会解析为 s.a

2017-12-19 09:17:35