257 votes

Différence entre . et: à Lua

Je suis confus quant à la différence entre les appels de fonction via . et via :

 > x = {foo = function(a,b) return a end, bar = function(a,b) return b end, }
> return x.foo(3,4)
3
> return x.bar(3,4)
4
> return x:foo(3,4)
table: 0x10a120
> return x:bar(3,4)
3
 

Que font les : ?

366voto

BMitch Points 3744

Les deux points permettent d'implémenter des méthodes dont le premier paramètre est self . Ainsi, x:bar(3,4) devrait être identique à x.bar(x,3,4) .

51voto

Oleg V. Volkov Points 9724

Pour la définition, c'est exactement la même que pour la définition de soi manuellement - il va même jusqu'à produire même bytecode sur la compilation. I. e. function object:method(arg1, arg2) est le même que function object.method(self, arg1, arg2).

Sur l'utilisation : est presque le même que . - un type spécial de l'appel seront utilisées qu'en interne pour assurez - object , et les éventuels effets secondaires des calculs et des accès sont calculés qu'une seule fois. Appelant object:method(arg1, arg2) est le contraire même que object.method(object, arg1, arg2).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X