In article <1024750854.951300.30306.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> |ただ、(, {, do の扱いが難しくて(というか Ruby 自体の仕様が理解できない
> |ので)微妙に挙動が違うようなんですが。
> 
> というか、私も理解してないかも。この機会に文法を見直すか。

明確に定義していただけるととてもありがたいですね。

今のところ、ブロックの結合性の話の基本は

m1 a1, m2 a2, m3 a3, ..., mN aN do end
m1 a1, m2 a2, m3 a3, ..., mN aN {}

というようにブロックが結び付く可能性のあるメソッド呼び出しが複数ある場
合、

m1 (a1, m2 a2, m3 a3, ..., mN aN) do end
m1 a1, m2 a2, m3 a3, ..., (mN aN {})

というように、do end はもっとも左のメソッド呼び出しと結合し、{} はもっ
とも右のメソッド呼び出しと結合するということを意図しているのではないか、
と理解しています。

# 実のところ本当にこれでいいのかといわれると自信はありませんが。

で、問題は {}, do end が複数ある場合です。単純に左にある {}, do end か
ら上記の結合規則を適用するというようにすると
  a 1, b 2 {} {}
が
  a (1, (b (2) {})) {}
に解釈されるなど、現在の実装では parse error になるものが許されちゃう
のでなんらかの制約が存在するのは確かなんですが、その制約がいったいど
のようなものかというのが把握できないんですよねぇ。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)