【发布时间】:2020-09-08 18:32:57
【问题描述】:
我在这个网站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 equality meta-method