2012-08-25 154 views
0

我在ruby中遇到了可選參數的weirb問題。 這是我的代碼:設置可選參數將其他參數的默認值設置爲零

def foo options={:test => true} 
    puts options[:test] 
end 

foo # => puts true 
foo :lol => 42 # => puts nil 

我想不通,爲什麼第二個電話把零。 似乎是把其他參數設置爲:測試爲零。

謝謝。

+0

相關:https://github.com/bbatsov/ruby-style-guide/issues/63 – tokland

回答

1

發生這種情況的原因是,如果它是默認參數,傳遞散列參數將完全覆蓋它(即它設置options = {:lol => 42}),因此options[:test]鍵不再存在。

爲了給特定散列鍵的缺省值,嘗試:

def foo options={} 
    options = {:test => true}.merge options 
    puts options[:test] 
end 

在這種情況下,我們合併的哈希與某些鍵({:test => true})的默認值,與另一種散列(在包含密鑰=>值參數)。如果兩個哈希對象中都有鍵,則傳遞給merge函數的哈希值將優先。

相關問題