2016-01-17 22 views
2

如果我想要拯救一個潛在的錯誤並抓住潛在的投擲物,我應該如何套住它們?這兩者是否相同,這只是一個偏好問題?救援和同時捕獲

begin 
    catch(:some_throw) do 
    ... 
    end 
rescue SomeError 
    ... 
end 


catch(:some_throw) do 
    begin 
    ... 
    rescue SomeError 
    ... 
    end 
end 
+0

@WandMaker他們不是替代品。 – sawa

+0

@WandMaker我沒有意識到錯字。感謝您指出。 – sawa

回答

1

它是一個基於意見的問題,可以用任何一種方式來論證。所以,在我看來......

如果您計劃通過throw返回一個值,那麼,第二個選擇似乎有用,因爲它會讓你rescue錯誤和throw某種默認值。

即使你使用throwcatch只是管理循環迭代,並打破了它在一定條件下,第二個選擇似乎仍然更具可讀性和封裝所有catch塊內部的邏輯。

1

它們並不完全等效。在第一種替代方案中,catch只會攔截begin子句中出現的值,而第二種也包含rescue中的值。


話雖這麼說,如果你在的情況下,當這兩者是等價(又名你不要在rescue子句中拋出:some_throw):

  • 的參數對於第一種選擇將是我們傾向於認爲begin - rescue塊附上「正規」聲明。 throw - catch很少使用,並且具有非錯誤語義更多「常規」 -y。

  • 第二種選擇的論點是應該努力在begin - rescue從句中包含最少量(僅可能失敗)的代碼。

就我個人而言,我更喜歡第一個。