From: Yukihiro Matsumoto Date: 2011-06-12T02:24:05+09:00 Subject: [ruby-dev:43756] Re: [Ruby 1.9 - Bug #3456] bisarre comma まつもと ゆきひろです In message "Re: [ruby-dev:43755] Re: [Ruby 1.9 - Bug #3456] bisarre comma" on Sun, 12 Jun 2011 00:17:05 +0900, Urabe Shyouhei writes: |俺がこれはバグだと思うのは、括弧のあるなしで意味が変わるというのが凶悪だ |という思うからです。なぜ | i(j,) | k l |がOKで | i j, | k l |がNGなのか、あきらかに混乱のもとです。 「演算子(この場合はコンマ)が行末にある時には継続」というルー ルとの組み合わせで発生している現象ですね。このルールを知って さえいればそんなに混乱しないと思うなあ。 |さらにいうと | i j, do end | k l |も現状OKです。もはやわけわからん。 これも同様ですね。行末にコンマが来てないから。 |これは#5には書いてありませんが、追記すると、 | | i j, do end | i j, { } | i j, -> { } | |はすべて合法で、かつ、すべて異なる解釈です。意味が分かりません。 全部違うものだから。異なる解釈である方が当然では。 |この行末に,を許そうとした変更はrevertしたほうがよいと思います。 なんかいろいろ言われてますが、はっきりとは書いてないがほのめ かされてるのだと思う、 括弧のないメソッド呼び出しの引数リストの末尾にコンマの存在 を許すと、おそらくは意図していない行継続が起きてしまい、ユー ザーが驚く 点だけには同意します。変更したときにこの点には気がついてませ んでしたし。上にある「混乱のもと」とか「わけわからん」とか 「意味が分かりません」というのは、つまり、このことを言いたかっ たのかなあ。 で、同意したので、少なくとも「括弧のないメソッド呼び出し末尾 のコンマは許さない」という変更は行いましょう。今、yaccのルー ルを見たら、revertするのは4行削るだけだけど、括弧のある場合 だけ許すとなるともうちょっと複雑になるなあ。まあ、ルールひと つ増やすだけだけど。 まつもと ゆきひろ /:|)