From: gotoken@... (GOTO Kentaro) Date: 1999-02-18T20:24:39+09:00 Subject: [ruby-dev:5282] Re: Bigfloat [compare to NaN] ごとけんです In message "[ruby-dev:5280] Re: Bigfloat [compare to NaN]" on 99/02/18, 石塚圭樹 writes: >>こう言うのをいくつか書くと必要な道具が見出せると思っています. > >まあ, そうですけどね. 今は実装のことよりもインターフェイスを検討した方 >が良いかと... > >そうすると, 自ずと実装も限られてくると. いやぁ,それに関して言わせてもらうと僕は,Integer(1.3) みたいなインターフェイスがそもそも拡張性に乏しすぎると 思うのです. >この案を全然否定するつもりはないですが, > > Anumber(n) > >をすると必ずクラスを作りますよね. > > x = Anumber(56).new(10) > y = Anumber(56).new(10) > >とすると, x, yが別のクラスになっているのが気持ち悪いですね. やはり, 生 >成したクラスはどっかに保持していて, 同じ精度のクラスを調べたら同じクラ >スを返した方が良いと思います. 気持悪いという指摘は理解できます.ただ,それが気持以上に 悪いことなのかどうかは僕にはまだわかりません. もし悪いならば,生成したクラスを登録しておいて新たな生成を 抑制することも出来ると思います. >私も[ruby-dev:4921]の最後で書いたように, 関数とパラメータでクラスを表 >すのは良い案だと思うのですが, 気になっていることが2つあります: > >1. クラス生成の方法(クラスを生成するとして) >2. 変換関数はどうするか? 1. に関しては,既存クラスに関してはしかたないと 思いますが,今後は採用すべく検討しても良いと思います. >Bigfloat(10) ってやった時にクラスを作られると何か間違えないかなあ...っ >て点です. うーん,確かに最初は混乱しやすそうだというのは認めますが, この手のインターフェイスを否定する理由としてはちょっと弱いと 思います.いままでその手の変換関数は Integer と Float と Array と String の4つしかなかったわけで. 2. に関しては induced_from または new を使いましょう というのが僕の今の考えです. > Bigfloat(10)(100) => 10.00000000 > >とかは, とても書けないし... Bigfloat(10).new(100) ではいけませんか?? # ちょっと Bigfloat(10)(100) の意図がわかりませんでしたが. >Bigfloat(prec, val= nil) > >で, 1引数ならクラスを返す, 2引数ならvalをprecで変換する. って手もあり >ますが, やはり, 標準のインターフェイスと違っているし... > >Bigfloat(prec) >Bigfloat(val, prec) > >ってのも... > ># 悩ましい. そうかなぁ,パラメトライズされたクラスを関数で生成する案なら, クラスが毎回生成されるのが悪いかどうかの判断をまず検討して, 悪ければ同じ引数が2度以上与えられたときに新しくクラスを 生成するのを抑制すればいいし,悪くなければそのままバンバン 作っていいし,どちらにせよ型変換は new か induced_from で 出来るのですが…ひょっとして new とか induced_from という 名前が煩わしいと思われるのですか?? -- gotoken