Czy ktoś może wyjaśnić różnicę między dostępem do atrybutu instancji za pośrednictwem self.attribute
i przez @attribute
?
Czy ktoś może wyjaśnić różnicę między dostępem do atrybutu instancji za pośrednictwem self.attribute
i przez @attribute
?
Odpowiedzi:
self.attribute
wywołuje metodę attribute
.
self.attribute = value
wywołuje metodę attribute=
z argumentem value
.
@attribute
i @attribute = value
pobierz / ustaw wartość zmiennej instancji @attribute
.
Zasadniczo są to dwie zupełnie różne rzeczy.
Jednak jeśli wywołasz attr_accessor :attribute
to, definiuje metodę attribute
do zwrócenia @attribute
i metodę attribute=(value)
do ustawienia @attribute = value
. Więc w tym przypadku nie ma różnicy.
„Bezpośredni dostęp do zmiennych instancji jest około dwa razy szybszy niż uzyskiwanie do nich dostępu za pomocą metod dostępu”
Sprawdź: https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/
self.
(chyba że piszesz metodę pobierającą / ustawiającą), nawet jeśli obecnie maszattr_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ę.)