From: Yusuke ENDOH Date: 2010-02-01T01:26:13+09:00 Subject: [ruby-dev:40277] Re: [Bug:trunk] "foo" + :bar should be rejected 遠藤です。 2010年2月1日0:56 Yugui : > 2010/1/31 Yusuke ENDOH : >> 1.9.1 にも p129 くらいからバックポートされてしまっているようなので、 >> revert する必要があると思います > Yugui さん > > 間違いではありますが、深刻に古いプログラムを壊すものではないと思います。 > むしろrevertすると現行のプログラムを壊す虞があるのでrevertしません。 すみません、重大性が伝わらない報告でした。 "foo" + :bar は大したことのない例なんですが、StringValue が Symbol を 受け入れてしまうというバグだったため、StringValue を使っている箇所 すべてに影響します。 例えば、File.join("foo", :bar) とか、Encoding.find(:filesystem) とかが 動いてしまっていました。 Symbol を暗黙的に String に変換しないという仕様は、Symbol < String の 時の激しい議論の末に否定された結論だと聞きました。 放っておくとどんどん誤った使い方が広まってしまいます。実際、test-all に 1 箇所、rubyspec に 5 箇所、この挙動に依存する箇所がありました (すべて 修正済です) 。 なので、 - 1.9.1 に早くバックポートして誤った使い方をやめさせる - 議論の結論を捨て、1.9 系列ではこの挙動を認めることを宣言する のどちらかにするべきだと思います。 -- Yusuke ENDOH