應始終執行的程式碼

如果有你想要執行的程式碼,請使用 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 子句在 beginrescue 子句返回值之前執行。如果 ensure 子句有一個 return,它將覆蓋任何其他子句的 return 值!