成瀬です。

Kouhei Sutou wrote:
> Ruby 1.9ではたくさんの"incompatible encodings: ..."という例
> 外を目にすると思うのですが、その例外クラスをArgumentErrorか
> らIncompatibleEncodingErrorというような専用の例外クラスにす
> るというのはどうでしょうか?
> 
> "incompatible encodings: ..."なエラーを例外を捕まえやすくす
> ると、エンコーディングを設定し直して再チャレンジするとか、親
> 切なエラーメッセージを出力するというようなことがしやすくなる
> と思います。
> 
>   def parse(input)
>     begin
>       MyParser.new(input).parse
>     rescue IncompatibleEncodingError
>       puts "input encoding must be #{$!.expected_encoding}"
>       puts "but was #{$!.actual_encoding}"
>       nil
>     end
>   end

たしかにそれはいいかもしれません。

迷うところが、
* IncompatibleEncodingError にするか、EncodingError と一段広く取っておくか
* スーパークラスを ArgumentError にするか
あたりでしょうか。


なお、現在 incompatible encoding や differ の ArgumentError が投げられる場合、
期待されるエンコーディングがない場合も多いのではないかと思います。

基本的には receiver のエンコーディングと argument のエンコーディングが
異なるとかでしょうね。
# つまり、receriver と argumentがとれるべきかなぁ。


-- 
NARUSE, Yui  <naruse / airemix.jp>