比较Lua 5.2中不同类型的值

时间:2013-09-29 16:08:54

标签: lua lua-table

我想重载<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)。

2 个答案:

答案 0 :(得分:2)

这是不可能的。

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

答案 1 :(得分:1)

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