From: Yukihiro Matsumoto Date: 2005-11-29T17:59:34+09:00 Subject: [ruby-dev:27871] Numeric と Complex まつもと ゆきひろです Ruby組み込みのNumericはComparableをincludeしていて、値がリニ アに並ぶことを仮定しています。しかし、Complexは複素数ってく らいですから一次元に並べることはできません。 現在は原点からの距離を使って大きさを比較する<=>を提供してお 茶を濁しているのですが、たとえばRangeの両辺に使うなどを考え るとおかしなことになります。というか、Rangeは両辺が数(リニア な数)の場合には範囲として動作させたいのですが、Complexのおか げで kind_of?(Numeric) が使えないことを気にしています。 この件についていくつか選択肢が考えられるのですが、私自身は実 際のプログラミングで複素数を使ったことがないので、どれがよい のか判断できません。 * Numericの下にInteger, Float, Rationalなどに共通のスーパー クラスを用意する。こちらにComparableをincludeする。名前 はMagnitude ? * NumericにCompapableをincludeするのをやめて、Integer, Float, Rationalなどでそれぞれincludeする。しかし、これで どんな問題が解決するのかよくわからない。 * ComplexをNumericのサブクラスにするのをやめる。coerceがあ るので動くはず。「ComplexはNumberだ」と言われると弱い。 * Complexを比較するなんてのは例外的なことなので考えない(要 するに現在のまま)。RangeはComplexに対して原点からの距離 で比較するままで構わない。 ご意見を聴かせてください。 まつもと ゆきひろ /:|)