我在这个网站http://lua-users.org/wiki/MetamethodsTutorial上找到了以下引用:
当在两个表上使用 == 运算符时调用 __eq,引用相等性检查失败,并且两个表具有相同的 __eq 元方法 (!)。
现在我用 Lua 5.3.5 对其进行了测试,这根本不是我观察到的:
a = {}
b = {}
m = {}
m2 = {}
setmetatable(a, m)
setmetatable(b, m2)
m.__eq = function(p1, p2) print("why"); return true end
m2.__eq = function(p1, p2) print("why2"); return true end
这是我测试的代码。
> a == b
why
true
> b == a
why2
true
看起来它和比较运算符做的事情一样,它只是获取左表并使用它的元方法。
这在最近的 Lua 版本中是否发生了变化,还是我的测试出错了?
谢谢你的帮助。