是否有更簡潔和習慣的方式來編寫下面的代碼,它用於指定一個方法的可選參數(在params/options散列中)的默認值?是否有一種慣用的方式來指定Ruby中可選參數的默認值?
def initialize(params={})
if params.has_key? :verbose
@verbose = params[:verbose]
else
@verbose = true # this is the default value
end
end
我很想把它簡化爲這樣的事情:
def initialize(params={})
@verbose = params[:verbose] or true
end
這幾乎作品,除非你真的需要使用has_key? :verbose
作爲條件,而不是僅僅評估params[:verbose]
,在爲了覆蓋想要指定「false」值的情況(例如,如果您想在本例中將:verbose => false
作爲參數)。
我意識到,在這個簡單的例子,我可以很容易做到:
def initialize(verbose=false)
@verbose = verbose
end
,但是,在我真正的代碼,我其實有一堆可選參數(除一些必需的),我會比如將可選的部分放在params散列中,這樣我就可以很容易地只指定(按名稱)少數我想要的,而不必按順序列出它們(並且可能不得不列出其中我不想要的部分) 。
Perl現在擁有// =語法來解決以這種方式檢查錯誤值的問題。我知道這對此沒有幫助。這就是爲什麼它是一個評論,而不是一個答案... – mopoke 2009-12-29 00:21:05