From: eklerni Date: 2007-08-07T01:11:05+09:00 Subject: [ruby-list:43807] Re: Procの仕様について From:eklerni #外してるかもしれませんが スコープから外れたprocの各動作は、 Ruby1.9では以下のようになります。 def foo proc { return } end foo.call # => #:2:in `block in foo': unexpected return (LocalJumpError) #from :5:in `call' #from `
' def bar proc { retry } end bar.call # => # : retry outside of rescue clause def baz proc { break } end baz.call # => #:18:in `block in baz': break from proc-closure (LocalJumpError) #from :21:in `call' #from :21:in `
' さらに、proc{}をlambda{}に替えたものについても調べると、 proc lambda 1.8.6 ○  ○ 1.9 ○  × (return,breakできないものを×、1.86のproc{}での動作を○とする) returnできる、という関数的挙動をlambdaに限定したようです。 まとめると、 lambda {return}、lamba{break}はlambdaを抜ける。1.8.6でのproc{}はたまたま lambdaと 同じ挙動をするが、本来期待されている動作ではないので、 スコープを外れているprocでreturn、breakを使いたい場合はlambdaを用いること。 ってことだと思います。 ruby 1.8.6 (2007-07-28 patchlevel 5000) [i386-mswin32_80] ruby 1.9.0 (2007-08-01 patchlevel 0) [i386-mswin32_80]