Czy ktoś może wyjaśnić różnicę między dostępem do atrybutu instancji za pośrednictwem self.attributei przez @attribute?
Czy ktoś może wyjaśnić różnicę między dostępem do atrybutu instancji za pośrednictwem self.attributei przez @attribute?
Odpowiedzi:
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.
„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ę.)