3

Ruby 中有 Perl 等效的 END 块吗?在 Perl 中,如果我指定一个 END 块,那么无论程序在哪里退出,都会执行该块中的代码。这是关闭打开文件句柄的强大功能。Ruby 是否支持类似的功能?我尝试了 Ruby 的“END{}”块,但如果由于错误而在代码中退出,它似乎不会被调用。

谢谢!

4

2 回答 2

3

Use at_exit,无论是否引发异常,它都会运行:

at_exit { puts 'exited!' }
raise

按预期打印“退出”。

仅当您不能使用ensure, 时才应考虑这一点,因为这at_exit会导致逻辑远离实际退出发生的位置。

于 2012-07-30T03:32:00.097 回答
1

是的。一个块可能有一个“确保”子句。这是一个例子:

begin
  # This will cause a divide by zero exception
  puts 3 / 0
rescue Exception => e
  puts "An error occurred: #{e}"
ensure
  puts "I get run anyway"
end

运行它会产生:

An error occurred: divided by 0
I get run anyway
于 2012-07-30T03:04:14.603 回答