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

In [ruby-list :9153 ] the message: "[ruby-list:9153] Matrix#to_i [Re:
irb -m] ", on Aug/17 16:17(JST) GOTO Kentaro writes:

>ごとけんです

>結論から言うと 
>Numeric#to_f と Numeric#to_i は削るべきだと思います。
>いまは Complex だけですが、だれか Quotanion(四元数)
>なんてものを作ってしまうかも知れませんし。
>それかそれでも、もし、Complex#to_f を作りたいなら、
>Complex#image != 0 のときは例外を返すべきだし、
>それが嫌なら Complex#abs の別名にするとか。

本来の意味でのto_f, to_iの定義ですね. これは, Float, Integerを自然なし
方で変換するメソッドということで良いともいます. 

>また普通の欲求として、名前はともかく現行の 
>Matrix#to_f の仕様のような再帰的に to_f していくもの
>がいることはまず無いと思います。なぜかと言うと
>体(field)を指定したいことはあっても、細部の精度を
>指定したいことは無いですから。
>もし、体の意味で要素の型変換をするものがあるとすれば
>そいつは to_* とか map_to_* では無くて over(klass) という
>なまえだと思います。

再帰的にto_fするというだけのメソッドとしてMatrix#to_fを考えると変なの
は確かですね. 

Matric#to_fの意味は各要素をFloat化するメソッドとして定義したつもりでし
た. そういう意味では, きっと, 私が欲しいと思っている機能(メソッド)は以
下の機能のような気がしますです.

>一方、精度の意味で、現行の Complex#to_r のようなものを
>用意されてるんだと思うのですが、それなら、Matrix#prec や
>Numeric#prec(klass) なんていう precision を指定する
>メソッドを用意してそいつで polymorphism する方が
>Matrix#to_f の意味も解りやすくてすっきりしてると
>思うんですが、どうでしょう?

例えば,

  Matrix#prec(Float)

は各要素をto_fするし,

  Complex#prec(Float)

は, 実数部と虚数部をto_fするという意味になるわけですね?

その, 精度という視点で考えるのは良い案だと思います. ただ, prec(Float)っ
て良く使うので, prec_fとかprecfぐらいの方が良いなと...

というのも,

 2.to_f / 3.to_f

なども, 別にFloatに変換して計算したくてやっているわけではなくて, Float
の精度で計算したいはずなんで, もし, prec_fがあったら

 2.prec_f / 3.prec_f

を使うべき場面だと思うんですよ.

>だって、いまの Matrix のモデルだと
>Matrix[[Matrix[[1111,1112],[1121,1122]],12],[21,22]]
>なんてのも出来るんだもの。

それと, 今までの議論て違う話しですよね?

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