🕌
Ruby の ensure で return するとどうなる?
メソッドに 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"
なにかに利用できそうですかねえ。
Discussion