なかださんこんにちは。斎藤です。 ----- Original Message ----- From: <nobu.nakada / nifty.ne.jp> To: "ruby developers list" <ruby-dev / ruby-lang.org> Sent: Tuesday, June 24, 2003 2:23 AM Subject: [ruby-dev:20430] Re: [BigDecimal] proposal to change specification > At Tue, 24 Jun 2003 02:06:26 +0900, > Tadashi Saito wrote: > > 「bigdecimal-rationalがrequireされるのは > > bigdecimalとrationalの双方がrequireされた後でなければならない」 > > という事でしたら、順番を間違えたらLoadErrorにする方が明確になって > > 親切かと思い、その変更も付け加えてみました。 > > その二つをrequireするとなにかまずい理由があるんでしょうか。 いや、するとまずいことはないです。「しないと」まずいのかな、と勝手に 想像してしまいました。 今のままですと、[ruby-dev:20410]のように、bigdecimal-rationalが 他の二つのライブラリより早くrequireされると、警告が出たりエラーで終了 したりしてしまいます。 これは作者の小林さんが、bigdecimal-rationalが最後にrequireされる事を 意図されているのかなということを、勝手に想像してしまいました。 しかし、上記の提案は取り下げさせてください。 いろいろさわった結果、下のようにしても同様の警告が出るのが 分かりました。 % ruby -e 'class C; end > class C<Numeric; end' -e:2: warning: already initialized constant C ここで最初から、「C<Numeric」と書けば警告は出なくなります。 というわけで、bigdecimal-rational.rbへのパッチは 以下のものにしていただけるでしょうか > 小林さん 上記と同様に「<Numeric」を付け加えて見ました。こうすると requireする順番に関わらず、黙って正しく処理されるようになります。 度々すみませんが、よろしくお願いします。 Index: ext/bigdecimal/lib/bigdecimal-rational.rb =================================================================== RCS file: /src/ruby/ext/bigdecimal/lib/bigdecimal-rational.rb,v retrieving revision 1.1 diff -u -r1.1 bigdecimal-rational.rb --- ext/bigdecimal/lib/bigdecimal-rational.rb 28 Mar 2003 05:00:21 -0000 1.1 +++ ext/bigdecimal/lib/bigdecimal-rational.rb 24 Jun 2003 04:38:58 -0000 @@ -1,7 +1,7 @@ # # BigDecimal <-> Rational # -class BigDecimal +class BigDecimal < Numeric # Convert BigDecimal to Rational def to_r sign,digits,base,power = self.to_parts @@ -12,11 +12,11 @@ else denominator = base ** denomi_power end - Rational.new(numerator,denominator) + Rational(numerator,denominator) end end -class Rational +class Rational < Numeric # Convert Rational to BigDecimal # to_d returns an array [quotient,residue] def to_d(nFig=0) --- 斎藤ただし