<
標準演算子を使用して、Lua で要素ごとの比較を行う方法を見つけようとしています。たとえば、私がやりたいことは次のとおりです。
a = {5, 7, 10}
b = {6, 4, 15}
c = a < b -- should return {true, false, true}
私はすでに足し算 (および引き算、掛け算など) で動作するコードを持っています。私の問題は、Luaがブール値との比較の結果を強制することです。ブール値は必要ありません。比較の結果としてテーブルが必要です。
これまでの私のコードは、加算が機能していますが、比較が機能していません。
m = {}
m['__add'] = function (a, b)
-- Add two tables together
-- Works fine
c = {}
for i = 1, #a do
c[i] = a[i] + b[i]
end
return c
end
m['__lt'] = function (a, b)
-- Should do a less-than operator on each element
-- Doesn't work, Lua forces result to boolean
c = {}
for i = 1, #a do
c[i] = a[i] < b[i]
end
return c
end
a = {5, 7, 10}
b = {6, 4, 15}
setmetatable(a, m)
c = a + b -- Expecting {11, 11, 25}
print(c[1], c[2], c[3]) -- Works great!
c = a < b -- Expecting {true, false, true}
print(c[1], c[2], c[3]) -- Error, lua makes c into boolean
Lua プログラミング マニュアルによると、__lt
メタメソッド呼び出しの結果は常にブール値に変換されます。私の質問は、どうすればそれを回避できますか? Lua は DSL に適していると聞きましたが、ここで動作する構文が本当に必要です。MetaLua を使用すれば可能だと思いますが、どこから始めればよいかわかりません。
同僚は、<<
代わりに__shl
メタメソッドを使用することを提案しました。<
私はそれを試してみましたが、間違ったシンボルを使用してハックするのではなく、実際には使用したいと思っています。
ありがとう!