我想重载<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)。
答案 0 :(得分:2)
这是不可能的。
如果两个对象具有不同的基本类型,则相等操作会生成false
,甚至不会调用元方法。
答案 1 :(得分:1)
不可能覆盖不同类型的值的相等性。