From: Tadayoshi Funaba Date: 2008-02-09T17:39:57+09:00 Subject: [ruby-dev:33672] Re: rational, complex and mathn > メソッドに渡された数値を整数化して使いたい場合を考えると, > なくなると不便ではないでしょうか? Fixnum などは、それぞれ自前で定義を持っているので、そういうことはない と思います。Fixnum は self を返すだけですね。 あまりちゃんとメンテされていない Rational や Complex に継承されるわけ ですが、Rational には不適切な定義です。また、Complex には意味がないで す。実際のところ、Float 以外には意味のない定義だと思います。 $ ruby19 -r complex -e 'Complex(1).floor' -e:1:in `floor': can't convert Complex into Float (TypeError) from -e:1:in `
' Numeric を継承するクラスで、もし、本当にこの定義 (一旦浮動小数点数に変 換してから整数にする) がほしいのであれば、そのクラスの実装において、 Float#{floor,ceil,truncate,round} を呼べばよいと思います。 > Numeric にあるなら,わたされた数値が Float だろうが Fixnum だろうが > arg.round とかを一発呼ぶだけで済ませられますが, > Float にはあるが Fixnum にはないとかの状況の場合は > 渡された数値の型をチェックしたり例外処理で対応してやったりする必要が > 生じると思います. Numeric を継承する殆どのクラスで、to_i や to_f がつかえますが、Numeric で定義されているわけではないようです。なので、大丈夫じゃないかと思いま す。