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

In [ruby-dev :4632 ] the message: "[ruby-dev:4632] Re: module
Precision ", on Feb/03 17:15(JST) GOTO Kentaro writes:

>ごとけんです

>おおむね考えましたが結構ややこしいので、議論を求めます。

>まず、僕の考える精度変換のときの方針を説明します。
>ある、数値 num があったとき、この数値を別の精度をもつ
>数値クラス OtherPrec のオブジェクトに変換するためには
>num.prec(OtherPrec) で得られるようにしようというのが
>基本方針です。

(中略)

>そこで (*) のためには prec とは別の精度変換のメソッドが
>必要です。これを terminal_prec (仮称)としますと、

(中略)

>現在の僕の考えは、新しく精度をもった数値クラスを実装する人は
>クラスメソッド induced_from と terminal_prec を用意し、
>Precition をインクルードするというモノです。
>これに対する何らかのコメントをどなたかお持ちですか??

一所懸命検討して下さったのに何なんですが, 私は昔のままで良いのでは? と
思っています. 

module Precision
  def prec(klass)
    # 知らないクラスはklassにたのむ
    klass.induced_from(self)
  end

  def induced_from(num)
    変換できない旨のエラーをだす
  end
end

class Integer
  include Precision

  def prec(klass)
    case klass
    when Integer # 知っているクラスはそれなりに変換
      self
    when Float
      self.to_f
        :
    else # 知らないクラスは向うに任せる
      super
    end
  end
end

def Integer.induced_from(num)
   case num
   when 組み込み数値クラス
      num.to_i
    else
      super or エラー
    end
end

つまり, induced_fromで再び呼び出す必要はなくエラーを出せば良いと思うの
ですが? 

というのもこのメソッドが呼ばれるのは, その前にprecでnumがklassに精度変
換する方法を知らないのでここに呼ばれているからです. だから,
induced_fromで精度変換を知らないからといって再びnumに聞いても知らない
に決まっていると思うのですが?

# 何か勘違いしている??

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---