けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :9214 ] the message: "[ruby-list:9214] Re: induced_from ", on Aug/19 16:08(JST) GOTO Kentaro writes: >ごとけんです >>prec本体を各クラスで定義するって方がわかりやすいと思います. > >賛成です。 ># てゆーか、ほぼ同じものを書いてたとこです ^^; (^^;;; ただ, 実はちょっと気になっているところがあって. 新規クラスNumXを作成した場合, 作るべきメソッドが class NumX def prec(klass) ... end def NumX.reduced_from(val) ... end end の2つメソッド作る必要が出ますよね. coerceの時は1つですんでいたのでちょっ とって気がしているんです. けど... うまい案はなさそうですよね... >>私はそういう考え方は好きです. >ですよね ^^;; (^^;;; >to_i, to_f は klass.induced_from(klass) のほうが >好ましくおもいます。 to_i, to_f は一般には無くても良い >と思うので(後述)。 >あ、考えて見れば Numeric には chr, upto, downto, divmod >という Complex には似つかわしくないのもあるんですね。 >(なんか upto は健気に Complex でも動くけど) >これらも Integer だけにして、 Numeric からは外して >もらいたいなぁ。 この辺りですが. 数学的にはNumericっていうとごとけんさんの言うとおり だとおもうんです. でも, Rubyを使っていて実際にはRealからはみ出すような 数って滅多に使わないと思うんですよ. で, RubyのNumericというのはReal的 な振舞いを行なうものであると見て, それ以外のクラスはそのメソッドを削除 したりして対応する方が良いかなって思っています. # 鳥クラス(Numeric)の中のペンギンクラス(Complex)見たいな考え方ですね. >ですね。とりあえず mathn.rb あたりに上記を読むような >ことを書かれると良さそうですね。 mathnって特殊なクラスですし... このPrecisionはもっと一般的な概念だと思うんですよ. ですので, 私として はRubyに標準の機能として組み込んで欲しいんですが. >どちらかというとこれには不賛成ですが、それはさておき >when Integer は when Fixnum, Bignum でしょうか?? ?? Integer ^ !(Fixnum | Bugnum) なクラスのことを考えています?? >case type_of?(klass) ではサブクラスも拾うので >決められない(それでも良いのかなぁ)し、やや面倒ですね。 この辺り良くわからなかったです. >>このばあい, Integer/Floatへの変換の時to_i, to_fでまずい場合はそのクラ >>スで対応しなくてはなりませんが. このぐらいのデフォルトの動作は許しても >>良いかも. > >不賛成の理由は僕の見方では、String のは別にしても >to_i と to_f はやっぱり、Float, Integer(とその子孫) >固有のメソッドのような気がしてまして、 >つまり、Numeric は一般には精度を担っていないという >気分があるんです(反例:Complex)。 この辺りは先のNumericをReal的に考えることができれば問題ないんですが... 不満でしょうか? といっても, 下の案はそうでもないってことですね? >んが、実装の取り込みのためにこの Module を使うのは >やぶさかではないと思う変態折衷主義者でもあります ^^;;; >だから特別なこれらのケースに関してはこれらのクラスで >対処するように、最初にあげられた案に加えて > >module Precision > def prec(klass) > klass.induced_from(self) > end > > def prec_i > prec(Integer) > end > > def prec_f > prec(Float) > end > > def Integer.induced_from(n); n.to_i; end > def Fixnum.induced_from(n); n.to_i; end > def Bignum.induced_from(n); n.to_i; end > def Float.induced_from(n); n.to_f; end >end # Fixnu.induced_from, Bugnum.induced_fromは必要ないと思いますが?? >と済ませる方が好みですが、効率は石塚さんの危険という案の >方が良さそうですね。どう思われますか?? 動作としては全く同じになりますね. こちらの方がエレガントな実装だと思い ます(^^;;; 先ほどもいったようにRubyに標準として組み込んで欲しいので, 実際に実装する人に任せますです.(^^;;; __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju / rational.com <<---