From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2003-07-10T20:16:26+09:00 Subject: [ruby-dev:20612] Re: [BigDecimal] renaming proposal けいじゅ@いしつかです. In [ruby-dev:20603] the message: "[ruby-dev:20603] Re: [BigDecimal] renaming proposal", on Jul/10 17:46(JST) Tanaka Akira writes: >ちなみに、メソッド名は literal_string というのを考えています。めったに >使わないものですから長く使いにくくすべきです。少なくとも text は短すぎ >ます。 わたしは, Float#literal_string 案はあまり賛成ではありません. 数(クラス)の性質って微妙ですから, リテラルを書いた時点で意味が確定する 方が良いと思います. このやりかただと, リテラルを書いた時点では, 実際の クラスは不定になり,それを用いる(評価する)段階でクラスが確定することに なってしまします. >次に、実際に使う場所はどこかというと、結局 Float からの変換のところだ >けです。つまり、[ruby-dev:20601] の例でいえば、constructor, coerce, >Float#[RB] あたりです。変換はそのあたりに閉じ込められるのが普通でしょ >うから、おそらくそれ以外のところでは使われません。 coerceで使われるのを最も危惧しています. coerceでこれが使われると, def func(a, b) a + b end d1 = BigDecimal.new(...) b = 1.01 func(a, b) と b = 1.0 + 0.01 func(a, b) となっているとき, 振る舞いが変ってしまうわけですよね. 直接リテラル由来 のものとそうでないものとで振る舞いが変るのは, 見つかりづらいバグのもと にもなりかねません. で, 私の案ですが, 前田さんのように専用のリテラルを導入する方が良いかと 思います. でも, 拡張性のあるやつね. 前の%記法案よりもめんどうですが, RubyのCレベルのインターフェイスで, Floatの最後の1文字に対応するCレベル 変換関数を定義できるようにし, たとえば, パーズ時に 1.000D とあったら, Dに対応するCレベル関数にその文字列を渡し, その関数は変換結 果を返すというのはどうでしょうか? __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---