在一个不可触碰的程序的某个时刻,会完成两个 Lua 值之间的比较:
return a==b;
我需要把它==
变成>=
,所以我来到了以下hack:
a = { value=5 }
b = { value=2 }
mt = {
__eq = function (op1, op2)
return op1.value >= op2.value
end
}
setmetatable(a, mt)
setmetatable(b, mt)
print(a == b)
这给出了预期的结果(true
)。现在,问题在于a
并且b
处于不同的上下文中,所以我无法做到:
setmetatable(a, mt)
setmetatable(b, mt)
相反,我可以这样做:
mtA = {
__eq = function (op1, op2)
return op1.value >= op2.value
end
}
setmetatable(a, mtA)
mtB = {
__eq = function (op1, op2)
return op1.value >= op2.value
end
}
setmetatable(b, mtB)
但是,a
andb
具有不同的类型,并且==
运算符返回false
甚至没有达到我的__eq
重载。
关于如何实现我需要的任何想法?