web-dev-qa-db-fra.com

Accès direct à une variable d'instance vs Utilisation d'une méthode d'accesseur

Quelqu'un peut-il expliquer la différence entre l'accès à un attribut d'instance via self.attribute et par @attribute?

80
pistacchio

self.attribute Appelle la méthode attribute.
self.attribute = value Appelle la méthode attribute= Avec l'argument value.
@attribute Et @attribute = value Récupèrent/définissent la valeur de la variable d'instance @attribute.

Donc, fondamentalement, ce sont deux choses entièrement différentes.

Cependant, si vous appelez attr_accessor :attribute, Il définit la méthode attribute pour renvoyer @attribute Et la méthode attribute=(value) pour définir @attribute = value. Donc, dans ce cas, il n'y a pas de différence.

99
sepp2k

"Accéder directement à la variable d'instance est environ deux fois plus rapide que d'y accéder avec les méthodes d'accesseur"

Découvrez: http://greyblake.com/blog/2012/09/02/Ruby-perfomance-tricks/

3
meso_2600