From: Tadayoshi Funaba Date: 2008-02-16T19:46:01+09:00 Subject: [ruby-dev:33812] Re: rational, complex and mathn 仕様を確認していきたいと思います。 Rational.new!、Rational.new、Rational.reduce、Rational() について Rational.new! 1つか2つの引数を取る。 一切のチェックなし。 引数が整数でない場合 to_i される。 reduce なし、unify なし。 石塚さんのは den が負のときの調整をするが、原さんのはしない。 ishi> Rational.new!(1,1.3) #=> Rational(1,1) hara> Rational.new!(1,1.3) #=> Rational(1,1.3) 原さんのはまるっきりそのままである。 原さんのは必ず引数が2つでなければならない。 Rational.new は、1つか2つの整数の引数を取る。 1つ目の引数が Rational で 2つ目が 1 の場合を許す。 reduce あり、unify あり。 原さんのはどちらの引数も整数でないとならない。 原さんのは reduce と同じである。 石塚さんのには new は存在しない。 Rational.reduce は、1つか2つの整数の引数を取る。 reduce あり、unify あり。 原さんのは new と同じである。 Rational() は、1つか2つの引数をとる。 どちらの引数も整数、浮動小数点数、有理数、文字列であってよい。 reduce あり、unify あり。 原さんのは、文字列はひとつでなければならない。 new は reduce と同じでいいかもしれません。 new で Rational を再入力できるのはいいのかどうか、よくわかりません。便 利であるかもしれないけど、そういうことは Rational() で出来るし、new で は、弾いてあげたほうが親切であると考えることもできます。 そもそも new! と reduce は必要なのか。 ruby で書くと new! のようなものが必要になりますが、C で書き直したもの で、意味があるかはよくわかりません。消すのはいつでも出来るので、今は残 してあります。 reduce の意義がよくわかりません。原さんのでは new と同じですが、new の 別名と考えても微妙です。 どうしても、Rational.new!(*Rational.reduce(n,d)) とか Rational.reduce(Rational.new!(n,d)) のようなものを想像してしまいます。 new! と reduce は、警告して、将来無効にしたほうがいいかもしれません。