ブロックを構成する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