Possible Duplicate:
What does the operator ||= stands for in ruby?
我对Rails中||=
运算符的用法感到困惑.我在网上找不到任何有用的东西.谁能给我指路吗?
如果你知道有任何网络链接,一定要告诉我.
我想知道下面这句话的意思:
@_current_user ||= session[:current_user_id] &&
User.find(session[:current_user_id])
Possible Duplicate:
What does the operator ||= stands for in ruby?
我对Rails中||=
运算符的用法感到困惑.我在网上找不到任何有用的东西.谁能给我指路吗?
如果你知道有任何网络链接,一定要告诉我.
我想知道下面这句话的意思:
@_current_user ||= session[:current_user_id] &&
User.find(session[:current_user_id])
让我们把它分解一下:
@_current_user ||= {SOMETHING}
也就是说,如果是nil
、false
或未定义,则将@_current_user
设置为{SOMETHING}
.否则,将其设置为@_current_user
,或者换句话说,什么也不做.扩展形式:
@_current_user || @_current_user = {SOMETHING}
好的,现在到右边.
session[:current_user_id] &&
User.find(session[:current_user_id])
你通常会看到&&
个值只有布尔值,但是在Ruby中你不必这样做.这里的诀窍是,如果session[:current_user_id]
不是nil,而User.find(session[:current_user_id])
不是nil,则表达式将计算为User.find(session[:current_user_id])
,否则为nil.
所以,把它们放在伪代码中:
if defined? @_current_user && @_current_user
@_current_user = @_current_user
else
if session[:current_user_id] && User.find(session[:current_user_id])
@_current_user = User.find(session[:current_user_id])
else
@_current_user = nil
end
end