2017-05-16 11 views
2

標準バイナリ演算子==、>、<、 - 、+、*などで実装されているルアコードがあります。私は、虚数のようなルアオブジェクトを持つ機能をいくつか追加したいと考えています(特に虚数ではありませんが、それを念頭に置いた答えはまだ私が探しているものです)。私は、これらの演算子のそれぞれのインスタンスをmult(x、y)のような関数で置き換えることなく、コード全体の元の演算子を機能させ、数値が虚数の場合を考えます。 Pythonでは、1はルア複素数級数算術

__add__,__mul__,etc. 

を使用します(不慣れな場合hereを参照してください)私はLUAでアナログを探しています。この機能を念頭においたクラス構造を提案できますか?

答えて

1

ここで理論を読むことができます。Metatables
hereは、複素数の実装例です。 その例のコードを貼り付けることができます

-- complex.add(cx1, cx2) 
-- add two numbers; cx1 + cx2 
function complex.add(cx1,cx2) 
    return setmetatable({ cx1[1]+cx2[1], cx1[2]+cx2[2] }, complex_meta) 
end 

-- complex.sub(cx1, cx2) 
-- subtract two numbers; cx1 - cx2 
function complex.sub(cx1,cx2) 
    return setmetatable({ cx1[1]-cx2[1], cx1[2]-cx2[2] }, complex_meta) 
end 

--// metatable functions 
complex_meta.__add = function(cx1,cx2) 
    local cx1,cx2 = complex.to(cx1),complex.to(cx2) 
    return complex.add(cx1,cx2) 
end 
complex_meta.__sub = function(cx1,cx2) 
    local cx1,cx2 = complex.to(cx1),complex.to(cx2) 
    return complex.sub(cx1,cx2) 
end