我在此站点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版本中进行了此更改,还是我的测试出错了?
感谢您的帮助。
在Lua 5.3中进行了更改。 The readme说它引入了“一些元方法的更灵活的规则”。比较the Lua 5.2 reference manual: