From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2008-02-17T21:44:25+09:00 Subject: [ruby-dev:33832] Re: rational, complex and mathn けいじゅ@いしつかです. In [ruby-dev :33820 ] the message: "[ruby-dev:33820] Re: rational, complex and mathn ", on Feb/17 13:00(JST) Shin-ichiro HARA writes: >原です。 > >今までの rational.rb の意図を確認すると… > > Rational::Unify が定義されているときは、Rational.new(1,1) で Integer > を返させたいのだが、スクリプトレベルではそれはできない。そこで、new > を禁止し、関数 Rational() を使わせる。そして、関数を用いた > Rational(1, 1) では、 Unify が定義されるときは、Rational でなく > Integer の 1 が返るようにする。これの仕組みで mathn.rb がスムーズに > 機能する。 > >という事ですよね。 あのぅ... Rationalにnewがないのはそういう話ではなくて, もっと概念的な話です. (Fixnumにも)Bignumにもnewはないのと同じで, Rationalにもnewは必要ないし, あってはならないと考えました. つまり, 有理数というものは(概念的には) ObjectSpace内に常に存在している. そして, Rational(a,b)ではオブジェクト を生成しているわけではなくそれを参照しているという感覚です. それよか, 有理数リテラルがあれば, newが必要という議論もなくなるんでしょ うけど... 以下の表記なら可能性があると思いますが? %R(1 2) #=> Rational(1,2) %rと間違いやすいかなぁ... これはだめかな? %/(1 2) そんなこと言わずに, やはり 1/2 がリテラルになってもらえれば(^^; __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---