鄭です。

In article <od87lp1i3.fsf_-_ / mew.gol.com>, Junichi Kurokawa <jun / mew.gol.com> writes:
>>>> "Y" == Yukihiro Matsumoto <matz / netlab.co.jp> writes:

    Y>   expr.each

    Y> は「exprのeachというメソッドを引数なしで呼び出している」とみなす
    Y> ことができ,これだけで完全な文になっています.

> それは既に聞きました。ただし、なぜ「とみなすことが出来る」のか説明が欠落
> していました。今回もなく、不満です。

> イタレーターのあとにはブロックが来るものではないんですか。ブロックが来る
> 可能性がある場合はブロックおよびひいてはブロックの終わりを明示すべきです
> ね。ほかにもperl(1)はifなどにブロックの省略を許しません。

なんか紛糾していますねぇ。

イテレータとは、yield を呼び出すメソッドの事です。
そして、メソッドは実行時になるまで確定しません。

  expr.each

という文がある時、expr がどのクラスのオブジェクトを返すかは実行して見ないと
わかりません。オブジェクトが確定しないと オブジェクトの持っている メソッド
each が、yield を呼び出すかどうかわかりません。
ですから、ruby が構文解析する段階では、each と書いてあるだけで
これはイテレータだと判断する事は出来ないわけです。

                         ┌─鄭  明毅───────────────────┐
                         └──tei / harmony.co.jp──tei / mirage.linc.or.jp─┘