Прямой доступ к переменной экземпляра или использование метода доступа - PullRequest
80 голосов
/ 09 января 2011

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

Ответы [ 2 ]

99 голосов
/ 09 января 2011

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

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

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

3 голосов
/ 12 января 2015

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

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

...