Lua __eq在具有不同元表的表上

问题描述 投票:1回答:1

我在此站点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
1个回答
0
投票

在Lua 5.3中进行了更改。 The readme说它引入了“一些元方法的更灵活的规则”。比较the Lua 5.2 reference manual

© www.soinside.com 2019 - 2024. All rights reserved.