ごとけんです

In message "[ruby-list:18858] Re: initializer polymorphism?"
    on 99/11/23, Takeyuki Watadani <watadani / tubulin.cb.m.u-tokyo.ac.jp> writes:
>ところで、やっぱり私があげた方法(*つきの仮引数を使って
>initialize内部で条件分岐する)にしてもGOTOさんの方法にしても
>ちょっと複雑になるというか可読性が落ちるというか、ムツカシク
>なりますよね? 皆様どうしているのでしょうか?

僕がよくやるのは、ユニバーサルでちょっと複雑な initialize を
用意して、そのあと、new を呼ぶユーティリティ的な生成用のメソッ
ドを複数作るといった感じです。

class Foo
  def Foo.type1(*args); new(:TYPE1, *args); end
  def Foo.type2(*args); new(:TYPE2, *args); end
  ....

  def initialize(argtype, *args)
    case argtype
    when :TYPE1
      ...
    when :TYPE2
      ...
    else
      ...
    end
  end
end

>#もしかしてそんな程度でムツカシイなんていってちゃいけない?
>#それとも正しくRuby的なプログラミングをすればそもそも
>#initializerが複数欲しいなんて要求自体出てこない?

少なくとも僕はそんなことないと思います。割と自然な要求でしょう。

-- gotoken