原です。 |ごとけんです |**というのも面白いのですが、提案の骨子は、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 でなくクラスへの継承としたいわけです。