2011-09-17 75 views

回答

4

它說:

  1. ,除非當前沒有設置(最新除非)
  2. 什麼也不做,返回@current_user如果@current_user已經設置(在||=部分)
  3. 否則調用方法/幫手login_from_session並將結果分配給@current_user
  4. 否則如果上一次調用已返回nilfalse,調用方法/幫手login_from_cookie,結果在任何情況下,分配給@current_user
  5. 返回@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中只有nilfalse評估爲布爾值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 

結合所有這些規則,你已經解釋了方法。

相關問題