From: Urabe Shyouhei Date: 2008-08-28T01:00:56+09:00 Subject: [ruby-dev:36020] Re: [Bug #505] 1.upto 2 {|i| p i } 卜部です。 むろん、私自身は理解していますが、他人に説明ができないという話です。 Yukihiro Matsumoto さんは書きました: > え? > > a {|i| ...} がメソッド呼び出しとして解釈できるから、で説明で > きると思うのですが。一方、2 {|i| ...} はどう頑張ってもメソッ > ド呼び出しとは解釈できません。 > しかしaというメソッドはどこにも定義されていないのですから、メソッド呼び 出しとは解釈できないではないですか。 # もちろんここで解釈する主体は「プログラマ」であって「パーサ」ではない > たぶん、ここは言葉通りではなく、「説明できません」という表現 > にはもうちょっと別の意図が含まれていそうですね。もうちょっと > 考えてみます。 > パーサや評価器にそれぞれの都合があるということは私は知ってますが、それは 私がRubyの中の人だからであって、そのような事情を知らない人からは見えてこ ない情報です。普通のプログラミング言語を学んできた普通なプログラマなら、 変数はその値をリテラルに書いてあったときと同じ役割をすることを学んでいる はずです。Rubyの場合は特に1.uptoとか3.timesとか書いて「リテラルも変数も 同じ」感を強調しているのに、この変更はそれらの前提知識に対立しています。 おせっかいを通すなら、むしろ 1.upto a { ... } も同じ振る舞い(つまりdoと おなじ結合強度に)なら、まだ若干分かるんですが。