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