🕌
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