From: Yasushi Shoji Date: 2000-10-28T12:51:57+09:00 Subject: [ruby-list:25659] Re: ブロックの返り値 # -talkでの local verの話でも思うのですが、procと methodって似すぎ?って # いうか、lispとかだと(methodが functionだとすれば)同じだけど、Rubyだと # ちょっとだけ違うってのが問題なのかな? At Sat, 28 Oct 2000 09:25:41 +0900, Kengo Nakajima wrote: > > > a = proc{|x| x} > > p a.call(1) #=> 1 > >  なるほど!と思い、以下のようなスクリプトを書いてみましたが > > a = Proc.new { > break > } > b = Proc.new { > 3 # これが最後の式だから、3という値が返るかな? > break > } > > どちらもnilが返りました。(ruby 1.6.0) どちらの procも最後の式は breakです。breakは nilを返すと決まっているようです。 > ちなみにruby 1.4.3ではこのスクリプトは unexpected breakと出て、 > 実行できませんでした。 1.4.6ではちゃんと動く様です。 At Sat, 28 Oct 2000 09:19:57 +0900, Kengo Nakajima wrote: > > 途中でブロックを値を返しつつ抜けたい場合は、 > throw/catchするか、raiseするか、 > goto(はないんでしたっけ)するか、しかないでしょうか 書きかたによるんじゃないでしょうか?たとえば if ... return foo end some_other_work と、書きたいなら if ... foo else some_other_work end と書けば良いのではないでしょうか? blockも loopの抽象化以上に使われているんだし、return を使っている methodから procに変更する事も可能なんだから blockの中でも returnを使わせ ろと言う事でしたらごめんなさい。 Ruby本の 2.18 イテレータの所なんかどうでしょう。 # Programming Ruby届かなかった‥(T-T) -- yashi