Хто-небудь може пояснити різницю між доступом до атрибута екземпляра через 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. Це захищає вас від додаткової роботи з рефактором та помилок, якщо згодом ви зміните метод (и) доступу, щоб зробити більше, ніж просто отримати / встановити змінну екземпляра. (Або якщо хтось інший виправляє або підкласує вашу роботу.)