以下のメソッドを呼び出すと何が得られるだろうか?
def foo return 1 ensure return 2 endRubyのensureはreturnを撤回できる - Hello, world! - s21g
Smalltalk だと、これはどんな動きをするのかと疑問に思ったので手元の Smalltalk 処理系(Squeak[link]、Cincom[link]、Dolphin[link]、GNU[link])で同じようなこと試してみました。
[^1] ensure: [^2] "=> 2 "
Rubyと同様にリターン(Smalltalk では「^」)は撤回されるようです。用事を済ませて出て行った人を、首根っこひっつかんで引き戻すみたいでちょっと面白い動きですね。
(ただ、Cincom Smalltalk では #ensure: の引数のブロックにリターンを含むべきではないと警告が出ます。)
流れを読めていませんでした…。orz