ごとけんです

In message "[ruby-list:9144] Matrix#to_i [Re: irb -m]"
    on 98/08/17, 石塚圭樹 <keiju / Rational.Com> writes:

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

>よね.... たとえば, 上記の方法は, 今でもComplexに対応できていませんよね.
>で, Complexに対応しようとおもったらメソッドを再定義しないとならないで
>すよね. メソッド名が全部同じならそういう問題はなくなります.

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

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

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

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

-- gotoken