2017-03-13 2 views
1

Je sais qu'il est possible de surcharger l'opérateur d'addition dans lua pour les tables. En faisant:lua quels opérateurs peuvent être surchargés

foo = { 
    value = 10 
} 
bar = { 
    value = 15 
} 
mt = { 
    __add = function(left,right) 
     left.value = left.value + right.value; 
     return left; 
    end 
} 
setmetatable(foo,mt); 

foo = foo + bar; 
print(foo.value); 

impressions: 25

Mais ma question est maintenant que les autres opérateurs peuvent vous surcharger et si __add est utilisé pour accéder à l'opérateur +, comment pouvez-vous accéder à d'autres opérateurs?

Répondre

4

que d'autres opérateurs peuvent vous surcharger

Liste complète des métaméthodes est décrite dans les manuels Lua: http://www.lua.org/manual/5.1/manual.html#2.8
http://www.lua.org/manual/5.2/manual.html#2.4
http://www.lua.org/manual/5.3/manual.html#2.4

si __add est utilisé pour accéder à la + opérateur, comment pouvez-vous accéder à d'autres opérateurs?

Voir le manuel. La description de Metamethods indique quel opérateur déclenche cette métaméthode exacte.

+0

Qu'en est-il de '__gc' et' __metable' et '__mode'? – warspyking

+0

Ceux qui sont déclenchés par des événements internes Lua ou liés à la gestion des structures internes. Il n'y a pas d'opérateurs explicites en langage Lua qui peuvent déclencher ces métaméthodes directement. – Vlad