From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2003-07-08T19:57:21+09:00 Subject: [ruby-dev:20556] Re: [BigDecimal] changing rule of coerce けいじゅ@いしつかです. In [ruby-dev:20549] the message: "[ruby-dev:20549] Re: [BigDecimal] changing rule of coerce", on Jul/08 16:11(JST) Shugo Maeda writes: >前田です。 >> しかし、もし Float クラスにリテラルが無くて >>  a = Float("1.234") * Float("5.678") /Float("3.14") >> 等と書かなければいけないとしたらどうでしょう? >> ちょっとした検算をするのに irb からキーインして電卓のように使用 >> するのは Float にしろ BigDecimal にしろよくやることです。 >> 実際にやってみれば、どちらが使いづらいか自明だと思うのですが? それと, 標準の機能としてつけるかは別問題だと思います. 今の事例は, irb でインタラクティブに用いるという前提があるので, そういう話になっていま すが。添付ライブラリは, irbで使うためのライブラリではなく、スクリプト として間違いのないプログラムが作成できるかという視点で考えた方がよいと 思います。 # インタラクティブに使用したいときはBigDecimalをラップするような別のラ # イブラリをロードすれば良いと思います. >ようするに、BigDecimalにリテラルがないために、しかたなく文字列を >使ってるわけですよね。 リテラルの代わりに使っているように見えますが, それだけに使い方が限定さ れないのが問題ですよね. たとえば, # どっかとおいところで str = "1.00001...." # いろいろやったり, 別メソッドの中などで. b0 = BigDecimal.new(...) b0 + str とやってしまったとき, strを作成したときの意図はBigDecimalでなかったと しても, b0+strではBigDecimalとして扱われてしまい, 一見正常に処理されて しまいますので, 見つかりづらいバグのもとになってしまいます. >でも、私も他の方と同様にそれはやっぱりスマートじゃないような気が >します。 Rubyも以前は, bigdecimal+str のようなものを許すような, けっこうおおざっ ぱな(?)ところもありましがが, 上記のような話もあって, 現行ではこういっ たことは基本的には許さないポリシーになっています. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---