Bezpośredni dostęp do zmiennej wystąpienia a użycie metody akcesora


Odpowiedzi:


100

self.attributewywołuje metodę attribute.
self.attribute = valuewywołuje metodę attribute=z argumentem value.
@attributei @attribute = valuepobierz / ustaw wartość zmiennej instancji @attribute.

Zasadniczo są to dwie zupełnie różne rzeczy.

Jednak jeśli wywołasz attr_accessor :attributeto, definiuje metodę attributedo zwrócenia @attributei metodę attribute=(value)do ustawienia @attribute = value. Więc w tym przypadku nie ma różnicy.


14
Zauważ, że generalnie zaleca się użycie self.(chyba że piszesz metodę pobierającą / ustawiającą), nawet jeśli obecnie masz attr_accessor. Chroni to Cię przed dodatkową pracą nad refaktoryzacją i błędami, jeśli później zmienisz metody dostępu, aby zrobić coś więcej niż tylko pobranie / ustawienie zmiennej instancji. (Lub jeśli ktoś inny łata lub podklasa twoją pracę.)
Phrogz

6
Jednym z błędów, o którym mówi Phrogz, jest to, że jeśli po prostu wywołasz atrybut = _____ zamiast self.attribute = ______, ustawiasz zmienną lokalną zamiast zmiennej instancji.
Jason Noble

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.