我知道,无论是否引发异常,都可以确保确保运行,但是有没有办法仅在调用营救后运行代码块?我问是因为如果有多个救援块以程序退出(或执行相同的操作)而结束,那么在每个救援块的末尾有没有更有效的方法来调用abort或exit?

最佳答案

如何使用另一个begin/rescue/ensure/end块在rescue下重新引发异常?

def foo(error_class)
  raise error_class, "raising an error..."
rescue Exception => e
  begin
    raise e
  rescue ArgumentError
    puts 'check your arguments please'
  rescue LocalJumpError
    puts "something's wrong with your block"
  ensure
    puts 'done handling the exception!'
  end
end

内部代码块中的ensure仅在发生异常后命中。

10-08 19:09