小林です。

GOTO Kentaro さん[ruby-list:18854] :

私にはrubyの奥義を垣間見たような気がします。

>
>   class A
>     class << self
>       alias __new__ new
>     end
>
>     def A.new(*arg)
>       __new__(*arg).instance_eval{init1(*arg); self}
>     end
>
>     def A.new2(*arg)
>       __new__(*arg).instance_eval{init2(*arg); self}
>     end
>
ちょっと、質問させてください.
"class << self" はなぜ必要なのでしょうか?
class とend をコメントにすると「undefined method `new'
for class `A'」となるので必要であることはわかるのです
が...

>
> >#*つきの仮引数を書いて、initializeの中で条件分岐して…って
> >#のも考えたんですが。
>

条件分岐がいやなら

class Test
 def initialize(*arg)
  yield arg
 end
end

obj=Test.new(1,2)   { |a| print "number of args=",a.size,"\n"} # number of
args=2
obj=Test.new(1,2,3) { |a| print "number of args=",a.size,"\n"}  # number of
args=3

とやってみたら、OKでした。

小林 茂雄
E-Mail: shigeo / tinyforest.gr.jp
Home Page: http://www.tinyforest.gr.jp