2014-05-05 66 views
0

如果我有一個從類A繼承的類B,我可以通過類A中定義的類方法實例化類B嗎?從Ruby中的父類實例化子類的實例

class A 
    def self.instantiate params 
    # ??? 
    end 
end 

class B < A 
end 

b = B.instantiate 123 
b.class # => B 

顯然,我不想叫B.new從A.從A繼承任何類應該從中受益。

class C < A; end 
c = C.instantiate 123 
c.class # => C 

class D < A; end 
d = D.instantiate 123 
d.class # => D 
+0

多可愛的用戶名! :-) –

+0

爲什麼不把'def self.instantiate params'改成'def initial params'?然後你可以在你的例子中使用'new'而不是'instantiate'。 – Max

回答

1

直接讓self.newself引用類本身的類方法):

class A 
    def self.instantiate params 
    self.new 
    # OR simply `new` 
    end 
end 

class B < A; end 
b = B.instantiate 123 
b.class 
# => B 

class C < A; end 
c = C.instantiate 123 
c.class 
# => C 

class D < A; end 
d = D.instantiate 123 
d.class 
# => D 

UPDATE

由於卡里Swoveland評論,你可以省略self.

def self.instantiate params 
    new 
    end 
+0

非常感謝!我現在只覺得啞巴了:D – garbagecollector

+1

你在'self.new'中不需要'self.'; 'new'就足夠了。 –

+0

@CarySwoveland,感謝您的評論。我根據你的評論更新了答案。 – falsetru