メソッド定義でのensureは値を返せるのか!
以下のように、ensure内でreturnされた2が帰ります。
Rubyのensureはreturnを撤回できる
なんと。ensureの結果が無視されるのは知ってたけど、明示的にreturnを返した場合はその値が返るんですね。これは便利!
メソッドの戻り値は return に渡した値です。return が呼び出されなかった場合は、 body の最後の式の値を返します。 body の最後の式が値を返さない式の場合は nil を返します。
クラス/メソッドの定義 メソッドの評価
リファレンスにも確かにそう書いてあった!
begin式全体の評価値は、本体/rescue節/else節のうち最後に評価された文の値です。また各節において文が存在しなかったときの値はnilです。いずれにしてもensure節の値は無視されます。
制御構造 begin
beginの評価でensureの値が無視されるのと混同してた。これは使わざるを得ない。
追記
しまった、上記エントリは「body内でreturnしててもensureでreturnすればそっちが返る」って趣旨だった。
正確にはensureのreturning的な使い方に書かれた内容に対してでした。