まつもと ゆきひろです

In message "Re: [ruby-dev:35173] Re: return from proc in lambda"
    on Thu, 19 Jun 2008 12:33:01 +0900, SASADA Koichi <ko1 / atdot.net> writes:

| 1.9 では,lambda を「メソッド呼び出し」っぽく扱う,という原則が
|あったはずです.なので,lambda{return}.call は,labmda を抜けるよう
|になっています.

そうですよね。気になるのは

def m
  p lambda{proc{return :r1}.call; :r2}.call
  :r3
end
p m

が、なにを出力するかですが、1.9では

 :r1
 :r3

1.8では

 :r2
 :r3

を返しますね。これは「1.9の方が正しい」ということにしましょ
う。1.8を直すかどうかはまだわかりませんが。

| さて,ここで lambda から見て orphan な proc をどう扱うべきか,とい
|う問題が出てきたので,「LocalJumpError にするべきか?」,という疑問
|が出てきたわけです.

そうですね。先程のメール[ruby-dev:35172]では、:ng1を返すと書
きましたが、これがlambdaの中であり、returnの対象は本来mでな
く、lambdaであることを考えると、:ng1よりもLocalJumpErrorであ
るべきだと思うようになりました。ごめん。

で、ついさっきまでLocalJumpErrorを返していたようなのに、:ng1
を返すようになりましたね。ということは、ささださんに無駄な作
業を強要させてしまいましたでしょうか。

                                まつもと ゆきひろ /:|)