Direkter Zugriff auf eine Instanzvariable im Vergleich zur Verwendung einer Zugriffsmethode

80

Kann jemand den Unterschied zwischen dem Zugriff auf ein Instanzattribut über self.attributeund durch erklären @attribute?

Pistacchio
quelle

Antworten:

100

self.attributeruft die Methode auf attribute.
self.attribute = valueruft die Methode attribute=mit dem Argument auf value.
@attributeund @attribute = valueden Wert der Instanzvariablen abrufen / festlegen @attribute.

Im Grunde sind es also zwei völlig verschiedene Dinge.

Wenn Sie jedoch nennen attr_accessor :attributees definiert die Methode attributezurück @attributeund das Verfahren attribute=(value)zum Set @attribute = value. In diesem Fall gibt es also keinen Unterschied.

sepp2k
quelle
14
Beachten Sie, dass es im Allgemeinen empfohlen wird self.(sofern Sie die Getter / Setter - Methode gerade schreiben) , auch wenn Sie derzeit haben attr_accessor. Dies schützt Sie vor zusätzlichen Refactor-Arbeiten und Fehlern, wenn Sie später die Accessor-Methode (n) ändern, um mehr zu tun als nur die Instanzvariable abzurufen / festzulegen. (Oder wenn jemand anderes Ihre Arbeit
patcht
6
Einer der Fehler, von denen Phrogz spricht, ist, wenn Sie einfach attribute = _____ anstelle von self.attribute = ______ aufrufen, setzen Sie eine lokale Variable anstelle der Instanzvariablen.
Jason Noble