From: Yukihiro Matsumoto Date: 2008-08-28T01:22:00+09:00 Subject: [ruby-dev:36023] Re: [Bug #505] 1.upto 2 {|i| p i } まつもと ゆきひろです In message "Re: [ruby-dev:36020] Re: [Bug #505] 1.upto 2 {|i| p i }" on Thu, 28 Aug 2008 01:00:56 +0900, Urabe Shyouhei writes: |> a {|i| ...} がメソッド呼び出しとして解釈できるから、で説明で |> きると思うのですが。一方、2 {|i| ...} はどう頑張ってもメソッ |> ド呼び出しとは解釈できません。 | |しかしaというメソッドはどこにも定義されていないのですから、メソッド呼び |出しとは解釈できないではないですか。 |# もちろんここで解釈する主体は「プログラマ」であって「パーサ」ではない 「どこにも定義されていない」という情報はそこまで確実なもので はないと思うのですが、人間が静的挙動と動的挙動を混同して、そ の種の知識(or 情報)に振り回されがちであることは認めます。 |パーサや評価器にそれぞれの都合があるということは私は知ってますが、それは |私がRubyの中の人だからであって、そのような事情を知らない人からは見えてこ |ない情報です。普通のプログラミング言語を学んできた普通なプログラマなら、 |変数はその値をリテラルに書いてあったときと同じ役割をすることを学んでいる |はずです。Rubyの場合は特に1.uptoとか3.timesとか書いて「リテラルも変数も |同じ」感を強調しているのに、この変更はそれらの前提知識に対立しています。 本人はレシーバ以外で「リテラルも変数も同じ」感を強調した覚え はないのですが、そういう風な受け止め方もあるのですね。言われ てみれば理解は出来ます。 |おせっかいを通すなら、むしろ 1.upto a { ... } も同じ振る舞い(つまりdoと |おなじ結合強度に)なら、まだ若干分かるんですが。 なるほど。リテラルであるか変数であるかで振る舞いが異なること は、一般の(Rubyの事情をよく知らない)ユーザにとって、メンタル モデルに反したり、混乱を招いたりする可能性があるということで すね。それはそれで筋が通っていると思います。 問題はどちらに揃えるかですが、ちょっと考えさせてください。 まつもと ゆきひろ /:|)