Direkter Zugriff auf eine Instanzvariable im Vergleich zur Verwendung einer Zugriffsmethode


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.