原です。

|ごとけんです

|**というのも面白いのですが、提案の骨子は、casting を使ったコ
|ンストラクタの一様化のようですね。

そうですね。ひとつのオブジェクトをいろんな見方をするのに、手間がかかる
のを避けようとしているのです。それと、String.new("str") は "str" にな
り、Array.new(0,1,2) あるいは Array.new([0,1,2]) は [0,1,2] にならない
不統一をなんとか吸収しようというわけです。

|ぼくも以前 Parametric とい
|うモジュールを書いたときにそのことを考えました。

あ、[ruby-list:18476] ですね。

|この手の処理
|が必要なのは数学モノを書くときに多いのかも知れません。

そうなんですよ。結構、階層性を持たず、並列にだーっとクラスが並んでそれ
らの間の変換=見なしが頻繁に起こるわけです。

|ところで casting たびにオブジェクトが生成されるのがイヤな場
|合もあります。それで「看倣し」という観点から、
|
|  class Object
|    alias as! extend
|    def as(mod) dup.as!(mod) end
|  end
|
|  a = Array[1..10].as Set
|  anArray.as! Set
|
|のようなことを一時期やってみたことがあります。つまり色々なク
|ラスを作るのではなく、必要に応じて要素にいちいち界面を付加し
|てやる方法です。それだけでも読みやすい気がしました。

確かに見なしのためにオブジェクトを生成するのはいやですね。実は私も今ま
で extend 派でした。extend って self が戻り値なのがありがたいところで
す。a_module ** obj を obj.extend(a_module) で定義するのも考えたんです
が、、、(extend_object は private)。

ただ、extend すると、個々に特異クラスを生成するので、かえって不効率か
なとも想像するのですが、どうかしら。

それとやはりインスタンス変数も操作したいので、どちらかというとモジュー
ルの extend でなくクラスへの継承としたいわけです。