2013-05-19 47 views
9

當從異常搶救,有兩種方法來指代出現了異常的變量:

begin 
    ... 
rescue Exception => e 
    handle_the_error(e) 
end 

begin 
    ... 
rescue Exception 
    handle_the_error($!) 
end 

我相信他們是可以互換的,但他們?是否有任何情況下應該使用另一種?

+0

這裏有太多['例子'](http://stackoverflow.com/search?q=inline+rescue)除了這一個。 –

回答

9

我也認爲這些片段是可以互換的。但是你應該總是喜歡顯式變量來表達線程全局的魔力。

一種情況$!魔術var爲方便:

result_or_error = perform_some_operation() rescue $! 

對於那些誰不知道這行的意思是:

它所謂的「內聯救市」。格式是這樣的:

<expr1> rescue <expr2> 

首先,expr1被評估。如果沒有發生異常,則返回其值。但是如果出現異常,則會評估expr2並返回其值。

因此,在這種情況下,如果perform_some_operation()發生異常,則將變量result_or_error設置爲該例外的一個實例(因爲$!返回上一個錯誤)。

+0

你能解釋一下嗎? –

+0

更新了答案 –

+1

謝謝。這其實很棒。 –