[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20243] Re: compare between String and Exception

From: matz@... (Yukihiro Matsumoto)
Date: 2003-05-20 08:13:32 UTC
List: ruby-dev #20243
まつもと ゆきひろです

In message "[ruby-dev:20194] Re: compare between String and Exception"
    on 03/05/16, Tanaka Akira <akr@m17n.org> writes:

|えーと、結構前の話ですが、この、比較が成立しない場合に <=>, <, <=, >, >=
|が nil を返すほうがいい、というのを撤回します。
|
|まぁ、現在の実装は <, <=, >, >= に関しては nil じゃなくて例外になるの
|でいいんですが、<=> の返り値は nil という流儀になっているので、このメー
|ルではそこに文句をつけます。端的にいえば、そこは nil と例外を使い分け
|るべきだ、というのが主旨です。

要するに

  * <=>が成立しないケースは厳密には2種類ある
    + そもそも型が合わない
    + 型は合うが順序関係が成立しない
  * これらを区別するため、前者は例外、後者はnilになるべきだ。

ということですよね。

私の考えとしては

  * 2種類を区別する必要があるのか

    ほとんどの場合、ユーザが関心あるのは、比較できるかできな
    いかだけ。

    「情報は多い方が良い」とは限らない。むしろ場合分けが多く
    なるかも。

    半順序関係はクラス/モジュールだけだし、理由はともかく順
    序関係が成立しないのだから、差別する必要はない。

    => 区別する必要はない

  * ないとすると、成立しない場合には、例外かnilか

    例外だとエラーメッセージに内部利用されている<=>が登場す
    ることになる

    これを避けるにはコストのかかる例外補足が必要

    => nilの方が良い

ということで、現状維持を推します。

nilから適切なメッセージを持つ例外に変換する方が、例外を補足
して適切なメッセージで再発生させるのより安いというのも動機の
一つです。

                                まつもと ゆきひろ /:|)

In This Thread