我正在查看这个ruby代码,他们引用了:
@current_user
和
self.current_user
有什么区别?
http://code.google.com/p/openplaques/source/browse/trunk/www/lib/authenticated_system.rb
答案 0 :(得分:7)
@current_user
是instance variable。 self.current_user
调用第10行的方法返回该实例变量,如果当前为nil则首先填充它。
答案 1 :(得分:4)
@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)
,否则它将仅返回现有对象而不重新初始化它。
答案 2 :(得分:1)
@current_user
取消引用名为@current_user
的实例变量。
self.current_user
将消息:current_user
发送给self
。