1

我想为<number> == <table>and<table> == <number>表达式重载 == (相等)运算符。

但是,在我看来,Lua 仅__eq在等式的两侧属于同一类型时才使用元方法。

例如,以下代码段无法按我的预期工作

x = {1,2}
setmetatable (x, {__eq = function (x,y) print "!" return x[y] ~= nil end})
print (x == 1)

但这一个可以:

x = {1,2}
setmetatable (x, {__eq = function (x,y) print "!" return x[y] ~= nil end})
print (x == {1})

是否可以实现==for<number> == <table><table> == <number>表达式?

我正在运行最新版本(5.2.2)。

4

2 回答 2

2

这是不可能的。

如果两个对象具有不同的基本类型,则相等运算的结果是false,甚至不需要调用元方法。

于 2013-09-29T16:15:14.843 回答
1

无法覆盖不同类型值的相等性。

于 2013-09-29T16:13:17.900 回答