In message "[ruby-list:18853] initializer polymorphism?"
    on 99/11/23, Takeyuki Watadani <watadani / tubulin.cb.m.u-tokyo.ac.jp> writes:
>Rubyで、あるクラスのインスタンスを複数の方法で生成したいので
>すが、
>
>class A
>   def initialize(a,b)
>     ...
>   end
>
>   def initialize(c,d,e)
>     ...
>   end
>end
>
>のように書くと見事にinitializeが再定義されてしまいます。イン

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

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

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

  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

    private

    def initialize(*arg)
      @common = arg[0]
    end

    def init1(*arg)
      @a = arg[1]
    end

    def init2(*arg)
      @b = arg[1]
    end
  end

  p A.new(1,2)  #=> #<A: @common=1, @a=2>
  p A.new2(1,2) #=> #<A: @common=1, @b=2>

-- gotoken