なかださんこんにちは。斎藤です。

----- 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)

---
斎藤ただし