相当于Perl';Ruby中的结束块

相当于Perl';Ruby中的结束块,ruby,Ruby,Ruby中是否有与Perl等效的端块?在Perl中,如果我指定了一个结束块,那么无论程序从何处退出,该块中的代码都将被执行。它是关闭打开的文件句柄的强大功能。Ruby支持类似的功能吗?我尝试了Ruby的“END{}”块,但是如果我在代码中由于错误而退出,它似乎不会被调用 谢谢 是的。块可能有一个“sure”子句。下面是一个例子: begin # This will cause a divide by zero exception puts 3 / 0 rescue Exception =

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


谢谢

是的。块可能有一个“sure”子句。下面是一个例子:

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
使用,无论是否引发异常,它都将运行:

at_exit { puts 'exited!' }
raise
按预期打印“退出”


如果您不能使用“<代码>确保< <代码> >,如<代码> ATEXECU/<代码>,则会导致逻辑远离实际出口发生的地方。

您是使用退出,而不是退出?对于
退出:“没有退出处理程序。”这似乎适用于两个代码>结束/代码>块和<代码> AtExeX处理程序。考虑使用<代码> IO。打开< /代码> /<代码>新< /代码>,以阻止您自己关闭文件。文件链接为<代码>结束<代码>:我从未在实际的代码中使用过它,而我在退出时使用过
Kernel#
。谢谢。在你的出口工作。与Perl不同,我必须在调用第一个出口之前在出口处添加
。是的,如果在调用
at\u exit
之前退出,那么
at\u exit
当然不会被调用,因此不会添加钩子<代码>在退出时发生
在运行时发生,而不是解析。