渡谷です。すばやい回答ありがとうございます。

>> "GOTO" == GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:

渡谷> Rubyで、あるクラスのインスタンスを複数の方法で生成したい
渡谷> のですが、
渡谷> 
渡谷> class A def initialize(a,b) ...  end
渡谷> 
渡谷> def initialize(c,d,e) ...  end end
渡谷> 
渡谷> のように書くと見事にinitializeが再定義されてしまいます。

GOTO> initialize は A.new から呼ばれるものです。

それはわかってた(つもりだった)んですけど、上記のように書いて

A.new(a,b)
A.new(c,d,e)

とかできたらいいな、って安直に考えてしまったわけです。
#で、引数の数が違うと怒られてしまったと。

GOTO> それが一つの方法ですね。別解としては下のようなのがあり
GOTO> ます。

GOTO>   class A class << self alias __new__ new end

GOTO>     def A.new(*arg)
GOTO> __new__(*arg).instance_eval{init1(*arg); self} end
(以下略)

newを再定義してしまうわけですか。確かにこれならできますね。
ありがとうございます。
#そうか、Rubyではnewもメソッドなんだな、うんうん。
#やっぱりわかった"つもり"はよくない。

ところで、やっぱり私があげた方法(*つきの仮引数を使って
initialize内部で条件分岐する)にしてもGOTOさんの方法にしても
ちょっと複雑になるというか可読性が落ちるというか、ムツカシク
なりますよね? 皆様どうしているのでしょうか?
#もしかしてそんな程度でムツカシイなんていってちゃいけない?
#それとも正しくRuby的なプログラミングをすればそもそも
#initializerが複数欲しいなんて要求自体出てこない?

では。

           東京大学医学部5年   渡谷 岳行(わただに たけゆき)
                 watadani / tubulin.cb.m.u-tokyo.ac.jp