相当于Ruby中的Perl的END块

时间:2012-07-30 02:51:44

标签: ruby

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

谢谢!

2 个答案:

答案 0 :(得分:3)

使用at_exit,无论是否引发异常,都会运行:

at_exit { puts 'exited!' }
raise

按预期打印“退出”。

如果你不能使用ensure,你应该只考虑这个,因为at_exit导致逻辑远离实际退出的地方。

答案 1 :(得分:1)

是。一个块可能有一个'ensure'子句。这是一个例子:

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