は、クラス階層を考える:A
を初期化するとき親クラスの初期化中にサブクラスの新しいインスタンスを返す方法次のように
class A
def initialize(param)
if param == 1 then
#initialize and return instance of B
else
#initialize and return instance of C
end
end
end
class B < A
end
class C < A
end
それは実際に初期化し、B
またはC
のインスタンスを返すことが可能ですか?私。 my_obj = A.new(param)
の場合param
の値に応じてB
またはC
のインスタンスがmy_obj
になり、A.initialize(param)
にチェックインされます。
私の使用状況では、使用するサブクラス(B
またはC
)と親クラス(A
)は基本的に実際には使用されません。 B
またはC
のいずれかが共通の祖先になるかどうかを判断するロジックを変更することをお勧めします。
これができない場合(またはスタイルが悪い場合)、param
のチェックとどのクラスを初期化するのかを確認する必要がありますか?
同様の質問が以前に回答されました。おそらくあなたが探しているのはファクトリメソッドです。 http://stackoverflow.com/questions/1515577/factory-methods-in-rubyを見てください。http://stackoverflow.com/a/1515580/1128705の回答があなたのニーズに合っていると思います。 –