Lua metatable变量

时间:2017-12-19 08:46:39

标签: lua lua-table

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

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具有相同的metatable mb(相同的地址),我认为t1.a和t2.a是mb.a,它们是相同的变量。 但是当给t1.a一个新值时,t2.a没有变化。当给mb.a一个新值时,t3就会改变! 有人能解释一下它会发生什么吗?

1 个答案:

答案 0 :(得分:1)

这就是__index的工作方式。

如果t有一个metatable m_index条目指向一个表s,那么阅读t.a会解析为s.a t.a