🕌

Ruby の ensure で return するとどうなる?

2024/03/17に公開

メソッドに ensure 節がある場合、メソッドを抜けるときに ensure 節の処理が呼ばれます。
このときにメソッドの戻り値はメソッドの本体の評価値を返します。

def func
  "hoge"
ensure
  # メソッドを抜けるときにここが呼ばれる
  "foo"
end

pp func
# => "hoge"

しかし ensure 節で return した場合にはその値がメソッドの戻り値として返ってきます。

def func
  "hoge"
ensure
  # これがメソッドの戻り値になる
  return "foo"
end

pp func
# => "foo"

これはメソッド内で return した場合でも同様です。

def func
  # ここで return しても ensure が優先される
  return "hoge"
ensure
  # これがメソッドの戻り値になる
  return "foo"
end

pp func
# => "foo"

なにかに利用できそうですかねえ。

GitHubで編集を提案

Discussion