From: matz@... (Yukihiro Matsumoto) Date: 1998-03-12T15:12:55+09:00 Subject: [ruby-dev:1722] Re: argument check in Range::new まつもと ゆきひろです In message "[ruby-dev:1721] Re: argument check in Range::new" on 98/03/12, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |>ちょっと気分が悪いですね.InfinityがNumericであるというのは |>そんなに変な話なんでしょうか. | |変な話しではないと思うのですが... | |それはともかく, このチェックはきびしすぎるような気がします. |lastとfirstのクラスが一致しなくてはいけないというところがです. それで |は, Numericは対応できないから別扱いにしているところがいかにも苦しい. まあ,それを言われるとその通りなのですが. |そのクラスがComparableであれば, | |comp.comparable?(other) | |という2項演算子を定義しなくてはならないとして, | | if (rb_funcall(first, rb_intern("comparable?"), 1, last)) | |で判断するのはいかがでしょう? | |# 大げさ過ぎるかなあ... いや,これはいくらなんでも.同じ大げさでも「Comparableは <=> を定義しなければならない」ことを利用して a <=> b を計算して,例外が発生せず,かつ a <= b であることをチェック する,という方がまだ良いように思います. まつもと ゆきひろ /:|)