2011-01-09 10 views

risposta

97

self.attribute chiama il metodo attribute.
self.attribute = value chiama il metodo attribute= con l'argomento value.
@attribute e @attribute = value ottenere/impostare il valore della variabile di istanza @attribute.

Quindi in pratica sono due cose completamente diverse.

Tuttavia, se si chiama attr_accessor :attribute che definisce il metodo per restituire attribute@attribute e il metodo per impostare attribute=(value)@attribute = value. Quindi in tal caso, non c'è differenza.

+14

Si noti che in genere si consiglia di utilizzare 'self.' (a meno che non sei scrivendo il metodo getter/setter) anche se tu_attualmente_ hai 'attr_accessor'. Questo ti protegge dal lavoro di refact aggiuntivo e dai bug se successivamente cambi i metodi di accesso per fare qualcosa di più che semplicemente ottenere/impostare la variabile di istanza. (O se qualcun altro aggiusta o sottoclassi il tuo lavoro.) – Phrogz

+6

Uno dei bug di cui parla Phrogz è che se chiami semplicemente attributo = _____ invece di self.attribute = ______ stai impostando una variabile locale invece della variabile di istanza. –

Problemi correlati