2014-06-13 48 views
1

考慮以下兩個紅寶石片段:`begin` block vs括號:只是一個風格問題?

def foo 
    @foo ||= begin 
    get_the_foo 
    end 
end 

VS

def foo 
    @foo ||= (
    get_the_foo 
    ) 
end 

的結果是一樣的。就個人而言,我更喜歡第二個,因爲begin讓我期待異常處理。

這些除了款式還有什麼區別嗎?例如,性能,範圍,內存等?

我的猜測是begin是'重',因爲它可以做更多。

+0

我認爲,如果有的話,這種差異是可以忽略的。 – sawa

+1

我對兩者都進行了基準測試,並獲得了相同的結果,所以我猜測它們在內部是一樣的。 –

+0

我不會這麼做 - 我只是做'@foo || = get_the_foo'。 – sevenseacat

回答

0

雖然我不認爲除了style之外,兩者之間還是存在顯着差異,我想真正的問題應該是「使用多行計算生成內聯表達式的返回值是否是一個好主意?」。

Ruby的條件賦值快捷鍵已經很難讀取了。我確信,如果您需要一個以上的步驟才能獲得價值,您應該將它們提取到一個方法中,並簡單地致電@foo ||= method_to_get_the_foo