Есть ли разница между self.current_user и @current_user? - PullRequest
0 голосов
/ 09 декабря 2010

Я смотрю на этот код рубина, и они ссылаются на:

@current_user

и

self.current_user

в чем разница?

http://code.google.com/p/openplaques/source/browse/trunk/www/lib/authenticated_system.rb

Ответы [ 3 ]

7 голосов
/ 09 декабря 2010

@current_user является переменной экземпляра .self.current_user вызывает метод в строке 10, который возвращает эту переменную экземпляра, сначала заполняя ее, если она в настоящий момент равна нулю.

4 голосов
/ 09 декабря 2010

@current_user обращается к фактическому свойству объекта, тогда как self.current_user вызывает метод current_user для self.

Это означает, что вы можете сделать что-то вроде этого:

def current_user
  @current_user.first_name
end

Так что теперь доступ к @current_user по-прежнему даст вам свойство, но self.current_user вернет вам только имя.

В вашем конкретном примере они используют объектное кэширование для установки свойства @current_user только при первом обращении к нему. Это означает, что если @current_user равен nil, он будет делать (login_from_session || login_from_basic_auth || login_from_cookie), иначе он просто вернет существующий объект без его повторной инициализации.

1 голос
/ 09 декабря 2010
@current_user

разыменовывает переменную экземпляра с именем @current_user.

self.current_user

отправляет сообщение :current_user на self.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...