メソッド定義での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的な使い方に書かれた内容に対してでした。