Ruby技術者認定試験の対象バージョンがRuby 3.1.xになったので、試験勉強していて気づいた挙動をブログにメモっておく。
ensure節の値は無視される
ensure 節が存在する時は begin 式を終了する直前に必ず ensure 節の本体を評価します。
begin式全体の評価値は、本体/rescue節/else節のうち最後に評価された文の値です。また各節において文が存在しなかったときの値はnilです。いずれにしてもensure節の値は無視されます。引用: https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html
def foo "foo" ensure puts "ensure" "bar" end puts foo #=> ensure #=> foo
ensure節にreturnがあると無視されない
def foo "foo" ensure puts "ensure" return "bar" end puts foo #=> ensure #=> bar