From: "K.Kosako" Date: 2001-01-18T13:32:24+09:00 Subject: [ruby-list:27219] do ... end & { ... } ブロックを構成するdo ... end と{ ... } の違いについて、 「Rubyプログラミング入門」(オーム社) p.196 や、 「オブジェクト指向スクリプト言語 Rubyリファレンスマニュアル」 ( http://www.jin.gr.jp/~nahi/RWiki/?cmd=view&name=Ruby%A4%CE%CA%B8%CB%A1 ) の中のイテレータの項で以下のように説明してありますが、 これらの説明は、本当でしょうか? { ... }の方がdo ... endブロックよりも結合強度が 強いです.例えば: foobar a, b do .. end # foobar がイテレータとして呼び出されます foobar a, b { .. } # b がイテレータとして呼び出されます 私が以下の方法で確認した限りでは、 do ... endは、メソッド形式(f(a))にもコマンド形式(f a)にも結合するが、 { ... }は、メソッド形式か、引数を記述してない形式にのみ結合する ように見えるのですが。 def foobar(*args) puts "foobar called with block.\n" if block_given? end def a puts "a called with block.\n" if block_given? end def b puts "b called with block.\n" if block_given? end foobar a, b do 0 end # => b called with block. foobar a, b { 0 } # => b called with block. foobar 100 do 0 end # => foobar called with block. foobar(100) { 0 } # => foobar called with block. # foobar 100 { 0 } # => parse error. ---- 小迫@ソフネック 渋谷区恵比寿1-15-1