From: Yukihiro Matsumoto Date: 2008-08-30T15:11:58+09:00 Subject: [ruby-dev:36054] Re: TypeError from Encoding.compatible? (r18920) まつもと ゆきひろです In message "Re: [ruby-dev:36049] Re: TypeError from Encoding.compatible? (r18920)" on Sat, 30 Aug 2008 08:16:21 +0900, "NARUSE, Yui" writes: |> 今までのようにそもそもencodingの対象 |> ではない時nil、compatibleでない時false、compatibleな時trueの |> 方が良いように思います。 | |そのような仕様は初耳です。 すいません。encodingを返すことを失念してました。 |> ですが、そもそもcompatible?が例外をあげる必要があるのでしょ |> うか。コンパチかどうかチェックしたいだけなのに例外が上がるの |> は使いにくい気がします。 | |もともと、Encoding.compatible? の引数に encoding を与えると |期待したとおりに動作しないというのがありまして、 |> Encoding.compatible?(Encoding::UTF_8, Encoding::US_ASCII) |=> # |# rb_enc_get_index() は encoding を対象としないため | |このような誤解を招く動作をするよりは、 |潔く例外を出してくれた方がいいと考えました。 |# Encoding.compatible? が encoding を取れるようにするべき、 |# という案については現在思案中 っていうか、その「思案」が終わってから変更してもよかったんじゃ ないんですかね。 |まつもとさんの仰る仕様ならば一貫性があるのでよいと思うのですが、 |現行の仕様では compatible な時に enc を返す以上、 |false と nil で区別という方法が使いづらいのがネックでしょうか。 |enc / false / nil でもいいのかなぁ・・・。 やっぱり enc / false / nil はおかしい気がしますね。うーん。 true / false / nil にして、最少公倍数なエンコーディングを求 めるメソッドは別に持つとか...。 |r18920 の意図は Encoding.compatible? が対応しているオブジェクトと、 |対応していないオブジェクトをはっきりわけることだったので、 |例外を出すことにこだわりはないのですが・・・。 Encoding.compatible?がなにをとるかを明確にする必要があると思 います。 たとえば将来IOとかStringIOとか「文字列のように振る舞うなにか」 を引数にとるような可能性を考えると、今のようなチェック(文字列 か正規表現のみ)はあまり良くないような気がします。 まつもと ゆきひろ /:|)