在Lua 5.2中比较不同类型的值

我想要为 <number> == <table><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})

是否有可能为 <number> == <table><table> == <number> 表达式实现 == 呢?

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

点赞
用户107090
用户107090

将下面翻译成中文并且保留原本的 markdown 格式

It is not possible to override equality for values of different types.

不可能为不同类型的值覆盖相等性。

2013-09-29 16:13:17
用户1009479
用户1009479

这是不可能的。

如果两个对象具有不同的基本类型,则相等操作将结果为false,甚至不调用元方法。

2013-09-29 16:15:14