2013-12-10 88 views
0

我就遇到了這個示例代碼爲Ruby的異常處理一個成語:救助條款中的多重任務?

begin 
    eval string 
rescue SyntaxError, NameError => boom 
    print "String doesn't compile: " + boom 
rescue StandardError => bang 
    print "Error running script: " + bang 
end 

我很困惑特別是關於與多個異常局部變量賦值行: rescue SyntaxError, NameError => boom。這是否意味着本地變量boom將採用SyntaxErrorNameError對象?或者它只是將被分配的NameError

它更令人困惑,因爲代碼本身會拋出TypeError,我想也許是因爲string是未定義的,但這可能並不重要。

回答

1

我在http://phrogz.net/programmingruby/tut_exceptions.html找到了上面的代碼。是你的來源?

無論如何,該代碼中的局部變量被分配,無論哪個錯誤發生;它只是在最後一個之後指定的。

是的,它拋出TypeError,因爲在今天的Ruby中,這些錯誤並沒有隱含地強制到一個字符串。也許他們習慣於這本書最初出版的時候。您需要將.message添加到本地變量引用以獲取錯誤消息(例如+ boom.message)。

+0

是的,那是我的來源,但來自實體書。作爲電子書可用的版本尚未針對Ruby 2.0進行更新(我認爲)。謝謝你爲我清理它,彼得! –