1
這種方法讓人困惑 - 有人可以給我解釋一下嗎?紅寶石 - 你能告訴我這裏發生了什麼嗎
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
這種方法讓人困惑 - 有人可以給我解釋一下嗎?紅寶石 - 你能告訴我這裏發生了什麼嗎
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
它說:
@current_user
如果@current_user
已經設置(在||=
部分)login_from_session
並將結果分配給@current_user
nil
或false
,調用方法/幫手login_from_cookie
,結果在任何情況下,分配給@current_user
@current_user
實例變量的值它可以被重寫,這樣
def current_user
if !(@current_user == false) # 1
if (@current_user)
return @current_user # 2
end
if (@current_user = login_from_session)
return @current_user # 3
end
if (@current_user = login_from_cookie)
return @current_user # 4
end
end
return @current_user # 5
end
更明確
這是ruby表現力的力量(和美)。請記住,在Ruby中只有nil
和false
評估爲布爾值false在if/else語句和||
,&&
運營商
其他提示,以更好地理解,在Ruby中,你有以下規則:
任何函數的返回值對於函數最後計算的表達式,所以
def foo
any_value
end
是相同的
def foo
return any_value
end
的如果/除非在表達式的端語句是相同的,如果/除非聲明,所以
do something if value
是相同的
if (value)
do_something
end
的||=
操作者是
@a ||= some_value
# is equivalent to
if [email protected]
@a = some_value
end
結合所有這些規則,你已經解釋了方法。