From: Shigeo Kobayashi Date: 2003-07-08T23:45:02+09:00 Subject: [ruby-dev:20560] Re: [BigDecimal] changing rule of coerce 小林です。 毎度まとめてすいません。 ----- Original Message ----- From: "石塚圭樹" Subject: [ruby-dev:20556] Re: [BigDecimal] changing rule of coerce > >> 実際にやってみれば、どちらが使いづらいか自明だと思うのですが? > > それと, 標準の機能としてつけるかは別問題だと思います. 今の事例は, irb > でインタラクティブに用いるという前提があるので, そういう話になっていま 単なる例として提示しただけなので、非常に大事だけど、それが全てとは 思っていません。 ようするに「Float("1.23")*Float("4.56") と書くのはイヤでしょ?」と言いたか ったのです。 > すが。添付ライブラリは, irbで使うためのライブラリではなく、スクリプト > として間違いのないプログラムが作成できるかという視点で考えた方がよいと > 思います。 同意です。 ...snip... > リテラルの代わりに使っているように見えますが, それだけに使い方が限定さ > れないのが問題ですよね. たとえば, > > # どっかとおいところで > str = "1.00001...." > # いろいろやったり, 別メソッドの中などで. > b0 = BigDecimal.new(...) > b0 + str > > とやってしまったとき, strを作成したときの意図はBigDecimalでなかったと > しても, b0+strではBigDecimalとして扱われてしまい, 一見正常に処理されて > しまいますので, 見つかりづらいバグのもとになってしまいます. これは変数がタイプを持たない Ruby の特徴として BigDecimal だけの 問題(?)ではないと思います。 逆に、極端な例ですが、 def add(a,b) a+b end で、Float/Ratinal/BigDecimal に対応できるというメリットもあるわけですから。 From: "石塚圭樹" Subject: [ruby-dev:20557] Re: [BigDecimal] changing rule of coerce > 本当のリテラルを自由に定義できるようにするのは無理かも知れませんが, % > 記法を拡張するというのはありかも. > > %D(100.10000019) > > とか > > %R(10, 20) > %C(10, 20) > %M[[1,2],[2,3]] > > と言う感じで, %?(..) の?のところを自由に定義(メソッドにマップ)できるよ > うにし, マップされたメソッドに(..)のところを文字列として渡すとか. > > 久々にヒットなアイディアだなぁ(^^;;; 同様な事を考えた私の頭も冴えてる? ^^;; ------------------ 小林 茂雄 shigeo@tinyforest.jp