2013-10-08 84 views
1

我有一個類Parent和類Child(這是一個Parent孩子)。擴展Ruby的父類的方法有不同的命名方法

  • Parent有一個方法叫做aaaa
  • Child有一個方法稱爲bbbb

這就是我想要達到的目標:

  • 我想bbbb是的aaaa的延伸。如果我在Child對象上調用aaaa,它將運行aaaa通常會執行的操作,以及bbbb中的任何其他操作。
  • 調用bbbb將執行上述操作(運行aaaa通常會執行的操作,然後執行bbbb中的任何操作)。

這是我落得這樣做:

class Parent 

    def aaaa 
    print "A" 
    end 

end 

class Child < Parent 

    alias_method :original_aaaa,:aaaa 
    def bbbb 
    original_aaaa 
    print "B" 
    end 
    alias_method :aaaa,:bbbb 

end 

c = Child.new 
c.aaaa # => AB 
c.bbbb # => AB 

工作。我猜。但它感覺真的很黑。另外,這樣做的一個缺點是,如果我想要在定義bbbb之前或之後擴展aaaa同名,事情會變得有點奇怪。

有沒有更簡單的方法來實現這一目標?

+3

問題是...... *爲什麼* ?! – Pete

+0

我可以看到這樣做的原因。這個問題有一些關於如何處理這個問題的想法: http://stackoverflow.com/questions/2564391/how-do-i-call-a-super-class-method – timpone

+0

你是什麼意思的「孩子」?你的意思是子類嗎? – sawa

回答

4
class Parent 
    def aaaa 
    print "A" 
    end 
end 

class Child < Parent 
    def aaaa 
    super 
    print "B" 
    end 
    alias bbbb :aaaa 
end 
+1

一看到這個問題,這似乎就是一個明顯的答案,但OP如何提出問題的複雜性使我相信「​​超級」並不是解決方案的充分策略。我會期待他們對你的回答作出迴應。 –

+1

@NewAlexandria:Nah,我只是愚蠢的:) – Voldemort

+1

足夠愚蠢地問這個問題很好。 –