应始终运行的代码
如果有你想要执行的代码,请使用 ensure
子句。
def divide(x, y)
begin
z = x/y
return z
rescue ZeroDivisionError
puts "Don't divide by zero!"
rescue TypeError
puts "Division only works on numbers!"
return nil
rescue => e
puts "Don't do that (%s)" % [e.class]
return nil
ensure
puts "This code ALWAYS runs."
end
end
当出现错误时,将执行 ensure
子句:
> divide(10, 0)
Don't divide by zero! # rescue clause
This code ALWAYS runs. # ensure clause
=> nil
当没有错误时:
> divide(10, 2)
This code ALWAYS runs. # ensure clause
=> 5
例如,当你想要确保关闭文件时,ensure 子句非常有用。
请注意,与 else
子句不同,ensure
子句在 begin
或 rescue
子句返回值之前执行。如果 ensure
子句有一个 return
,它将覆盖任何其他子句的 return
值!