From: Yukihiro Matsumoto Date: 2008-09-19T17:58:50+09:00 Subject: [ruby-dev:36390] Re: [Ruby 1.9 - Bug #407] (Open) String#<< まつもと ゆきひろです このチケットに関連してると思うのですが、 |> % ruby19 -Ku -ve'p "ABC" << 256' |> ruby 1.9.0 (2008-09-17 revision 19392) [x86_64-freebsd7.1] |> -e:1:in `
': 256 out of char range (RangeError) |> |> UTF-8 だとこんな感じ。 |> % ruby19 -Ku -ve's="ABC\u3042" << 256;puts s.dump' |> ruby 1.9.0 (2008-09-17 revision 19392) [x86_64-freebsd7.1] |> "ABC\xE3\x81\x82\xC4\x80" | |この1.9の振る舞いはうれしくないんじゃないかな。 |"ASCII Compatible"の定義とかをよーく考えると、ASCIIの文字列とそうじゃな |い文字列はこの場合同じ振る舞いになるべき(黙って大きい方のエンコーディン |グに揃えるか、一律にエラー)と思いますよ。 |# じゃないと激しく使いづらすぎてかなわん。 という指摘がありました。個人的には現状以外の振る舞いが適切だ とは思わないのですが、「compatibleなはずなのに振る舞いが違う のは変」という認知は理解できないでもないです。