けいじゅ@日本ラショナルソフトウェアです.

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 <<---