ごとけんです

In message "[ruby-list:9213] Re: induced_from"
    on 98/08/19, 石塚圭樹 <keiju / Rational.Com> writes:

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

>prec本体を各クラスで定義するって方がわかりやすいと思います.

賛成です。
# てゆーか、ほぼ同じものを書いてたとこです ^^;

>>でも精度を特徴付けるモジュールはありそうだし、あった方が
>>クラスのインターフェイスの指針が解りよいと思うのですが。
>
>私はそういう考え方は好きです.

ですよね ^^;;

>Ruby標準で:
>
>class Numeric
>  include Precision
>
>  def prec(klass)
>    case klass
>    when Integer
>      to_i
>    when Float
>      to_f
>    else
>      super
>    end  
>  end
>end

to_i, to_f は klass.induced_from(klass) のほうが
好ましくおもいます。 to_i, to_f は一般には無くても良い
と思うので(後述)。
あ、考えて見れば Numeric には chr, upto, downto, divmod
という Complex には似つかわしくないのもあるんですね。
(なんか upto は健気に Complex でも動くけど)
これらも Integer だけにして、 Numeric からは外して
もらいたいなぁ。

>としておけば, あとは, Matrix/Vector/Complexだけの対応で済みますね.

ですね。とりあえず mathn.rb あたりに上記を読むような
ことを書かれると良さそうですね。

>あと, ちょっと危険ですが:
>
>module Precision
>  def prec(klass)
>    case klass
>    when Integer
>      to_i
>    when Float
>      to_f
>    else
>      klass.induced_from(self)
>    end
>  end
>  
>  def prec_i
>    prec(Integer)
>  end
>
>  def prec_f
>    prec(Float)
>  end
>end
>
>でも良さそう.

どちらかというとこれには不賛成ですが、それはさておき
when Integer は when Fixnum, Bignum でしょうか??
case type_of?(klass) ではサブクラスも拾うので
決められない(それでも良いのかなぁ)し、やや面倒ですね。

>このばあい, Integer/Floatへの変換の時to_i, to_fでまずい場合はそのクラ
>スで対応しなくてはなりませんが. このぐらいのデフォルトの動作は許しても
>良いかも.

不賛成の理由は僕の見方では、String のは別にしても
to_i と to_f はやっぱり、Float, Integer(とその子孫)
固有のメソッドのような気がしてまして、
つまり、Numeric は一般には精度を担っていないという
気分があるんです(反例:Complex)。
んが、実装の取り込みのためにこの 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

とし、

>class Numeric
>  include Presision
              ^c      (^^;;
>end
>
>の追加とMatrix/Vector/Complexだけの対応で済みますね.

と済ませる方が好みですが、効率は石塚さんの危険という案の
方が良さそうですね。どう思われますか??

-- gotoken