2011-01-09 10 views

Respuesta

97

self.attribute llama al método attribute.
self.attribute = value llama al método attribute= con el argumento value.
@attribute y @attribute = value obtener/establecer el valor de la variable de instancia @attribute.

Así que básicamente son dos cosas completamente diferentes.

Sin embargo, si se llama a attr_accessor :attribute que define el método para volver attribute@attribute y el método para establecer attribute=(value)@attribute = value. Entonces en ese caso, no hay diferencia.

+14

Tenga en cuenta que en general se recomienda usar 'self.' (a menos que esté escribiendo el método getter/setter) incluso si _currently_ tiene 'attr_accessor'. Esto lo protege de los errores y el trabajo de refactorización adicional si más tarde cambia los métodos de acceso para hacer algo más que solo 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 si simplemente llama attribute = _____ en lugar de self.attribute = ______ está configurando una variable local en lugar de la variable de instancia. –

Cuestiones relacionadas