From: eklerni Date: 2007-08-07T12:27:20+09:00 Subject: [ruby-list:43813] Re: Procの仕様について From:eklerni > 1.8.6におけるProc.newとproc,lambdaとの関係性(それぞれの意味づけ)と > それが1.9ではどのように変わるのか > 前のメールでは勘違いしてたことがありました。1.8.6のproc{}はlambda{}なこ とを忘れてました。 procの挙動の変化というよりは、メソッド名のaliasの問題ですね。 1.8.6と1.9共通 Proc.new{...} はprocオブジェクトを返す。return、breakができない。 lambda{...} は内部的にlambdaフラグの立ったprocオブジェクトを返す。 return、breakができる。 ただし、proc{...} は 1.8.6 ではlambda{...}の別名 1.9 ではProc.new{...}の別名 見た目が近いほうと同じ挙動のほうがよいだろうという配慮からの変更だと思い ます。 1.8.6         | return | break | retry ---------------------------------------------------- Proc.new{...} |  x  | x  |  x  ---------------------------------------------------- proc{...}   |  o  | o  |  x  ---------------------------------------------------- lambda{...}  |  o  | o  |  x  ---------------------------------------------------- 1.9         | return | break | retry ---------------------------------------------------- Proc.new{...} |  x  | x  |  x  ---------------------------------------------------- proc{...}    |  x  | x  |  x  ---------------------------------------------------- lambda{...}  |  o  | o  |  x  ----------------------------------------------------