2017-05-16 1 views
2

J'ai un code lua implémenté avec les opérateurs binaires standard ==,>, <, -, +, *, etc. Je veux ajouter une fonctionnalité avec un objet lua comme des nombres imaginaires (pas spécifiquement des nombres imaginaires, mais une réponse avec eux en tête serait toujours exactement ce que je cherche). Je veux que les opérateurs originaux dans tout le code fonctionnent sans avoir à remplacer chaque instance d'un de ces opérateurs par une fonction comme mult (x, y) qui considérerait le cas d'un nombre imaginaire. En Python, on utiliseraitarithmétique de la classe de nombres complexes Lua

__add__,__mul__,etc. 

(voir here si peu familier) Je cherche un analogue en lua. Puis-je avoir une structure de classe suggérée avec cette fonctionnalité à l'esprit?

Répondre

1

Vous pouvez lire la théorie ici: Metatables
Et here est un exemple d'implémentation de nombres complexes. Je peux coller du code à partir de cet exemple

-- 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