Прямой доступ к переменной экземпляра vs. Использование метода доступа

Может ли кто-нибудь объяснить разницу между доступом к атрибуту экземпляра через self.attribute и @attribute?

Ответ 1

self.attribute вызывает метод attribute.
self.attribute = value вызывает метод attribute= с аргументом value.
@attribute и @attribute = value получить/установить значение переменной экземпляра @attribute.

Итак, в основном это две совершенно разные вещи.

Однако, если вы вызываете attr_accessor :attribute, он определяет метод attribute для возврата @attribute и метода attribute=(value) для установки @attribute = value. Поэтому в этом случае нет разницы.

Ответ 2

"Доступ к переменной экземпляра напрямую примерно в два раза быстрее, чем доступ к ним с помощью методов доступа"

Проверьте: http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/