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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.