抓住所有救援

时间:2012-11-24 21:44:07

标签: ruby rescue

在Ruby / Rails中,是否有一个“包罗万象”的rescue语句,它还允许更具体的rescue可能性?我试过了

begin
  # something
rescue URI::InvalidURIError
  # do something
rescue SocketError
  # do something else
rescue 
  # do yet another thing
end

事实证明,即使有URI::InvalidURIErrorSocketError,它也会进入最后rescue(即它执行do yet another thing。)我希望它{{1}分别是{},或do something

1 个答案:

答案 0 :(得分:0)

require 'uri'
require 'socket'

Errors = [URI::InvalidURIError, SocketError]
a = lambda { |e=nil|
             begin
               raise e unless e.nil? 
             rescue URI::InvalidURIError
               puts "alligator"
             rescue SocketError
               puts "crocodile"
             rescue
               puts "vulture"
             else
               puts "rhino"
             end }

现在尝试

a.( Errors[ 0 ] )
a.( Errors[ 1 ] )
a.call

它将完全按照您的需要运作。如果上面的代码不起作用,那么程序中的其他内容将超出您的想象。