Acceder directamente a una variable de instancia frente a utilizar un método de acceso

Respuestas:

100

self.attributellama al método attribute.
self.attribute = valuellama al método attribute=con el argumento value.
@attributey @attribute = valueobtenga / 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 attributea devolver @attributey el método attribute=(value)a establecer @attribute = value. Entonces, en ese caso, no hay diferencia.

sepp2k
fuente
14
Tenga en cuenta que generalmente se recomienda usar self.(a menos que esté escribiendo el método getter / setter) incluso si actualmente tiene attr_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.)
Phrogz
6
Uno de los errores de los que habla Phrogz es que si simplemente llama a attribute = _____ en lugar de self.attribute = ______, está configurando una variable local en lugar de la variable de instancia.
Jason Noble