如果我想要拯救一個潛在的錯誤並抓住潛在的投擲物,我應該如何套住它們?這兩者是否相同,這只是一個偏好問題?救援和同時捕獲
begin
catch(:some_throw) do
...
end
rescue SomeError
...
end
catch(:some_throw) do
begin
...
rescue SomeError
...
end
end
如果我想要拯救一個潛在的錯誤並抓住潛在的投擲物,我應該如何套住它們?這兩者是否相同,這只是一個偏好問題?救援和同時捕獲
begin
catch(:some_throw) do
...
end
rescue SomeError
...
end
catch(:some_throw) do
begin
...
rescue SomeError
...
end
end
它是一個基於意見的問題,可以用任何一種方式來論證。所以,在我看來......
如果您計劃通過throw
返回一個值,那麼,第二個選擇似乎有用,因爲它會讓你rescue
錯誤和throw
某種默認值。
即使你使用throw
和catch
只是管理循環迭代,並打破了它在一定條件下,第二個選擇似乎仍然更具可讀性和封裝所有catch
塊內部的邏輯。
它們並不完全等效。在第一種替代方案中,catch
只會攔截begin
子句中出現的值,而第二種也包含rescue
中的值。
話雖這麼說,如果你在的情況下,當這兩者是等價(又名你不要在rescue
子句中拋出:some_throw
):
的參數對於第一種選擇將是我們傾向於認爲begin
- rescue
塊附上「正規」聲明。 throw
- catch
很少使用,並且具有非錯誤語義更多「常規」 -y。
第二種選擇的論點是應該努力在begin
- rescue
從句中包含最少量(僅可能失敗)的代碼。
就我個人而言,我更喜歡第一個。
@WandMaker他們不是替代品。 – sawa
@WandMaker我沒有意識到錯字。感謝您指出。 – sawa