0

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

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

事实证明,即使有URI::InvalidURIErroror SocketError,它也会进入最后一个rescue(即它执行do yet another thing)。我希望它分别是do something, or do something else

4

1 回答 1

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

它将完全按照您的需要运行。如果您上面的代码不起作用,那么您的程序中发生的事情超出了您的想象。

于 2012-11-24T21:58:12.443 回答