From: Yukihiro Matsumoto Date: 2008-11-27T23:59:44+09:00 Subject: [ruby-dev:37214] Re: [ruby-cvs:27586] Ruby:r20368 (trunk): * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return まつもと ゆきひろです In message "Re: [ruby-dev:37213] Re: [ruby-cvs:27586] Ruby:r20368 (trunk): * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return" on Thu, 27 Nov 2008 21:29:37 +0900, Tadayoshi Funaba writes: |> * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return |> Integer for #div operation. | |かならずしも反対ではないですが、かなりはっきりとした仕様変更に見えます。 |原作者としては意図的にやっているらしい、ということだったので。 そうですね。これは1.9.1に含めるべきでない変更ですね。 [incompatible]マークをつけ忘れましたが。 ただ、「divは整除でIntegerを返す」というのはポリモルフィズム から言っても譲れない部分だと思いますので、私としては強く主張 したいところです。 |一方で、もしこの変更がありならば、floor、ceil、truncate、round あたりの |仕様も見直せる可能性があると思います。 ああ、そうですね。これらもBigDecimalではなく、整数を返した方 がうれしいでしょうねえ。 |それと BigDecimal と Float 共通ですが、ひとつ目の要素がInteger だったり、 |Float だったりしますね。 | |main@190-20081127> 1.0.divmod(1).collect{|x| [x,x.class]} |#=> [[1, Fixnum], [0.0, Float]] |main@190-20081127> 1.0.divmod(0).collect{|x| [x,x.class]} |#=> [[NaN, Float], [NaN, Float]] | |main@190-20081127> BigDecimal('1').divmod(1).collect{|x| [x,x.class]} |#=> [[#, BigDecimal], [#, BigDecimal]] |main@190-20081127> BigDecimal('1').divmod(0).collect{|x| [x,x.class]} |#=> [[#, BigDecimal], [#, BigDecimal]] | |divmod = div + modulo と考えると、他の言語で divmod やそれに相当するも |の、modulo などを調べると (CL、Scheme、Smalltalk、Python など)、確認し |たところではどれも零割でエラーになっているようですが、ruby でもエラーに |していいのかもしれません。 なるほど。 まつもと ゆきひろ /:|)