2010-05-10 81 views

回答

5

first patchRails ticket #4558

options.fetch(:alt, File.basename(src, '.*').capitalize) 

這行執行的基本部分並利用函數,然後將結果傳遞到Hash#fetch無論是否爲一個值的:替代在選項散列已經存在。

updated patch

options.fetch(:alt) { File.basename(src, '.*').capitalize } 

相同的基名/大寫Hash#fetch需要缺省值時才執行的代碼(即,當:替代密鑰不在選項散列存在)。這意味着如果不需要,可以跳過(可能很昂貴的)默認值的計算。

有關更多詳細信息,請參閱有關Hash#fetch的文檔。

+0

我很清楚認爲是這種情況,但我想我的測試不是很好。由於結果在兩種情況下都是一樣的,因此我感到困惑。謝謝。 – 2010-05-10 10:57:42

1

我不知道duck-punching Rails對Hash#fetch做了什麼,但是使用普通老Ruby對象時,我使用它而不是Hash#[],因爲當我要求某些東西而它不可用時,我想知道它。這就是所謂的「早失敗」(或「早崩潰」中程序員修煉的List of Tips