Хто-небудь може пояснити різницю між доступом до атрибута екземпляра через self.attribute
і за допомогою @attribute
?
Відповіді:
self.attribute
викликає метод attribute
.
self.attribute = value
викликає метод attribute=
з аргументом value
.
@attribute
і @attribute = value
отримати / встановити значення змінної екземпляра @attribute
.
Отже, в основному це дві абсолютно різні речі.
Однак якщо ви зателефонуєте, attr_accessor :attribute
це визначає метод attribute
для повернення @attribute
та метод attribute=(value)
для встановлення @attribute = value
. Тож у такому випадку різниці немає.
"Доступ до змінної екземпляра безпосередньо приблизно в два рази швидший, ніж доступ до них за допомогою методів доступу"
Перегляньте: https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/
self.
(якщо тільки ви не пишете метод геттер / сетер) , навіть якщо ви в даний час єattr_accessor
. Це захищає вас від додаткової роботи з рефактором та помилок, якщо згодом ви зміните метод (и) доступу, щоб зробити більше, ніж просто отримати / встановити змінну екземпляра. (Або якщо хтось інший виправляє або підкласує вашу роботу.)