アンタッチャブル プログラムのある時点で、2 つの Lua 値の比較が行われます。
return a==b;
==
これを に変換する必要がある>=
ため、次のハックにたどり着きました:
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
必要なものを達成する方法について何か考えはありますか?