From: Tadashi Saito Date: 2003-06-25T02:35:01+09:00 Subject: [ruby-dev:20446] Re: [BigDecimal] proposal to change specification 斎藤です。 ----- Original Message ----- From: To: "ruby developers list" Sent: Tuesday, June 24, 2003 3:18 PM Subject: [ruby-dev:20440] Re: [BigDecimal] proposal to change specification > > これは作者の小林さんが、bigdecimal-rationalが最後にrequireされる事を > > 意図されているのかなということを、勝手に想像してしまいました。 > > ということであればbigdecimal-rational.rbの最初に > > require 'bigdecimal' > require 'rational' > > を追加するのが一番素直な解決策だと思うのですが、それだとなにか > まずいのだろうか、ということです。 なるほど、理解しました。 しかし、 [ruby-dev:20436]で自分が提示した些細な変更をすれば bigdecimal-rationalが最後にrequireされる必要性はなくなるはずです ので、追加は必要ないと思います。 …かといって、橋渡し役の第三のライブラリを明示的に requireするのも冗長だと感じてきました。 少し考えたのですが、ベストなのは require 'bigdecimal' require 'rational' と書いた時点で、相互変換のメソッドが使える状態になって いることではないかと思います。 小林さんがbigdecimal-rationalの位置をどう捉えているか にも寄りますが、bigdecimalの一部と見て、bigdecimal.oの 内部でbigdecimal-rational.rbを読み込んでしまうのは どうでしょうか。 過去には、[ruby-dev:16888]で小林さんが >「最初から相手を必要としてしまうのを避ける」ために > BigDecimal op Rational -> BigDecimal を実装するの > は bigdecimal.c ではなくて bigdecimal-rational.rb 上 と発言されていますが、bigdecimal内部で最初から bigdecimal-rationalをrequireしても、 「最初から相手(=Rational)がrequireしてあることが必要」 ということにはなりませんよね。 問題はRationalを使わないとき、BigDecimal#to_rと Rational#to_dの定義が無駄になるというくらいで、 大したものではないと思いますが、いかがでしょうか? Index: ext/bigdecimal/bigdecimal.c =================================================================== RCS file: /src/ruby/ext/bigdecimal/bigdecimal.c,v retrieving revision 1.6 diff -u -r1.6 bigdecimal.c --- ext/bigdecimal/bigdecimal.c 6 May 2003 13:18:26 -0000 1.6 +++ ext/bigdecimal/bigdecimal.c 24 Jun 2003 17:17:26 -0000 @@ -1438,6 +1438,8 @@ rb_define_method(rb_cBigDecimal, "truncate", BigDecimal_truncate, -1); rb_define_method(rb_cBigDecimal, "_dump", BigDecimal_dump, -1); + rb_require("bigdecimal-rational"); + #ifdef USE_MUTABLE_METHOD rb_define_singleton_method(rb_cBigDecimal, "assign!", BigDecimal_assign, 3); rb_define_singleton_method(rb_cBigDecimal, "add!", BigDecimal_add3, 3); --- 斎藤ただし (bladeに感謝)