2013-10-08 42 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

足够愚蠢地问这个问题很好。 –