¿Alguien puede explicar la diferencia entre acceder a un atributo de instancia a través self.attribute
y por @attribute
?
Respuestas:
self.attribute
llama al método attribute
.
self.attribute = value
llama al método attribute=
con el argumento value
.
@attribute
y @attribute = value
obtenga / establezca el valor de la variable de instancia @attribute
.
Entonces, básicamente, son dos cosas completamente diferentes.
Sin embargo, si lo llama attr_accessor :attribute
, define el método attribute
a devolver @attribute
y el método attribute=(value)
a establecer @attribute = value
. Entonces, en ese caso, no hay diferencia.
"Acceder directamente a la variable de instancia es aproximadamente dos veces más rápido que acceder a ellas con métodos de acceso"
Visite: https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/
self.
(a menos que esté escribiendo el método getter / setter) incluso si actualmente tieneattr_accessor
. Esto lo protege de errores y trabajos de refactorización adicionales si luego cambia los métodos de acceso para hacer algo más que obtener / establecer la variable de instancia. (O si alguien más parchea o subclasifica su trabajo.)