From: "Y. NOBUOKA" Date: 2011-04-23T13:54:13+09:00 Subject: [ruby-list:48000] Re: lambda中のProc中のreturnの挙動について 信岡です。 JIS X 3017 を読んだりしましたが、lambda についてはあまり触れられておらず (Kernel.lambda メソッドのところで少し触れられている程度) よくわかりませんでした。。 前のメールにも書きましたが、昔の ruby-dev での議論で似たような話があったので とりあえずそれへの参照を置いておきます。 ruby-dev:35165 return from proc http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/35171?35002-35918+split-mode-vertical ruby-dev:35167 return from proc in lambda http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/35171?35002-35918+split-mode-vertical ただし、この議論の中のサンプルコード中に proc メソッドが使われているのですが、 Ruby 1.8 においては proc メソッドは lambda を生成し、Ruby 1.9 においては proc を生成するという違いがあることから、混乱が生じているように思います。 そこらへんの混乱があることを踏まえつつ発言の意図を汲み取ると ・[Ruby 1.8] proc 直下での return 式は、その proc を含んでいるメソッドを抜ける ・[Ruby 1.9] proc 直下での return 式は、その proc を含んでいるメソッドまたは 最も内側の lambda を抜ける (『1.9 では,lambda を「メソッド呼び出し」っぽく扱う, という原則があったはず』 という発言) ・[Ruby 1.9] lambda の中で生成された proc が、lambda の実行を終了したあとに 呼び出された場合 (orphan な proc の呼び出し) は LocalJumpError にするのが良いと 考えられるが、実装的に難しいし特に対応しなくても困らないと考えているため 実装しない (『レアケース過ぎるかなあ,とも思うので,対応しなくても, 特に困らないかとは思います』 という発言) という感じなのかなーと思いました。 ruby-dev 向きの話題だと思いますので、ruby-dev に投げられたほうがいいかもしれません。 -- 信岡 ゆう (NOBUOKA Yu)