2011年4月23日

[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)


投稿者 xml-rpc : 2011年4月23日 13:54
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103215
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。