From: Koji Arai Date: 2003-08-07T04:25:51+09:00 Subject: [ruby-list:38047] Re: proc method 新井です。 In message "[ruby-list:38046] Re: proc method" on 07 Aug 2003 04:12:15 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > > In message "[ruby-list:38045] Re: proc method" > on 03/08/07, Koji Arai writes: > > |> それぞれ理由があってのことですから。使い分けてください。 > | > |使い分けるのは構わないのですが、Proc オブジェクトを yield で > |やるように通常のイテレータブロックに(厳密に同じに)することが > |できないのはちょっと不便かと思いました。 勘違いしてました。私は block = Proc.new {|a,b,c,d| p [a,b,c,d]; break } 5.times(&block) が、 5.times {|a,b,c,d| p [a,b,c,d]; break } と同じにならないのかと思ってましたがそうではないですね。 => ruby 1.8.0 (2003-08-04) [i586-linux] [0, nil, nil, nil] であれば、問題ないかな。 def foo yield(1) end def bar(&block) foo(&block) end bar {|a,b,c,d| p [a,b,c,d]; break } => ruby 1.8.0 (2003-08-04) [i586-linux] [1, nil, nil, nil] イテレータブロックの伝搬も問題ないですね。 ただ、理解はできてません。むずかしい。 > うむ、以前はorphanでない時にはbreakなどは例外を発生させてい > なかった(yieldと同じ)のですが、どうして変更したんだっけな。 > 「例外を捕捉せよ」と思ったような気もする。 いろいろありましたからねえ。 -- 新井康司 (Koji Arai)