2013-10-23 22 views
0

過去,我有這樣的:與零法默認PARAMS在Ruby中

def foo(a=3, b=6) 
    puts a+b 
end 

但我這樣稱呼它:

foo(params[:a], params[:b]) 

這是好的,如果PARAMS是有,但如果他們不和它被稱爲具有:

foo(nil,nil) 

然後在3和6的缺省值未設置和它拋出的方法是undef「+」的誤差爲零類

我的問題是,如果有方法可以設置方法的默認值,即使nil被傳入方法。所以如果用戶告訴你零,你會說'擰你人!'反正給他3個。

這不是一個好主意,我意識到,但我只是好奇。

+0

爲什麼你不測試你的方法中的零值? '把a + b除非a.nil? || b.nil?' –

回答

2

而不是在方法簽名中使用默認值,您可以使用||=複合賦值運算符僅當變量在布爾上下文中計算爲nil或false時纔會分配一個值,因爲它將在未設置時進行分配。例如:

def foo a, b 
    a ||= 3 
    b ||= 6 
    puts a + b 
end 
+0

這就是我最終做的。我只是想知道是否有這樣的rubyism,我錯過了。 – joncodo

+1

當沒有參數調用foo時,這會與'ArgumentError'一起崩潰。我認爲你應該將'foo'定義爲'foo(a = nil,b = nil)'來保留默認的參數行爲。 – toro2k

+1

如果'a'或'b'爲'nil'或unset‖,這將* not *「賦值。如果'a'或'b'爲'nil'或'false'或未設置,它將分配一個值。 –