Qualcuno può spiegare la differenza tra l'accesso a un attributo di istanza tramite self.attribute
e tramite @attribute
?Accesso diretto a una variabile di istanza rispetto a Utilizzo di un metodo di accesso
77
A
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.
1
"variabile Accesso istanza è direttamente circa due volte più veloce di loro accede con metodi di accesso"
Partenza il: http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/
Problemi correlati
- 1. Accesso diretto a un elemento di matrice direttamente rispetto all'assegnazione a una variabile
- 2. Accesso FTP diretto a Heroku?
- 3. python: accesso a una variabile di istanza utilizzando un nome contenente una variabile
- 4. Accesso a una variabile membro protetta all'esterno di una classe
- 5. Accesso variabile globale a Swift
- 6. accesso a una variabile da un'altra classe
- 7. Accesso agli elementi di matrice riga-saggio rispetto a colonna
- 8. Accesso a una dict per variabile nei template di Django?
- 9. Accesso a una variabile globale da qualsiasi controller di app
- 10. Accesso a una variabile all'esterno di un'istruzione "if"
- 11. Accesso a un metodo di un frammento dall'attività ViewPager
- 12. IllegalAccessError: accesso a un metodo protetto
- 13. Sincronizzazione accesso a un valore di ritorno
- 14. Accesso a una variabile da un altro script C#
- 15. Accesso a ActionBar dall'interno di un frammento
- 16. Accesso variabile globale dall'interno di una classe
- 17. Accesso a un attributo utilizzando una variabile in Python
- 18. Accesso diretto alle celle TableLayoutPanel
- 19. Accesso diretto al client SimpleDB
- 20. Accesso a field.ch di Django
- 21. di accesso a parametri POST
- 22. Newbie OOP: accesso diretto ai campi direttamente rispetto al passaggio di oggetti come parametri
- 23. Principio di accesso di sicurezza a molla
- 24. Metodo di estensione prestazioni rispetto al metodo di istanza
- 25. Accesso a variabili statiche di un'altra classe
- 26. Proteggere file PHP da un accesso diretto
- 27. Accesso variabile statica dal metodo statico
- 28. Accesso a una matrice restituita da una funzione
- 29. accesso diretto al database gitlab
- 30. Accesso a un carattere in una stringa
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
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. –