2013-10-08 3 views
1

У меня есть класс Parent и класс Child (который является ребенок подкласс Parent).Расширение метода рубин родительского класса с другим именем метода

  • Parent имеет метод под названием aaaa.
  • Child имеет метод под названием bbbb.

Это то, что я хочу добиться:

  • Я хочу bbbb быть продолжением aaaa. Если я вызову aaaa на объекте Child, он будет запускать то, что обычно делал 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 

Это работает. Я полагаю. Но это было очень тяжело. Кроме того, недостатком этого является то, что если бы я хотел продлить aaaa с тем же именем либо до, либо после определения bbbb, все становится немного странным.

Есть ли более простой способ достичь этого?

+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

Это казалось очевидным ответом, как только я прочитал вопрос. Но изощренность того, как ОП задала этот вопрос, заставила меня поверить, что «супер» не была достаточной стратегией для решения. Я с нетерпением жду их ответа на ваш ответ. –

+1

@NewAlexandria: Нет, я просто тупой :) – Voldemort

+1

Достаточно глупый, чтобы задать вопрос очень хорошо. –

Смежные вопросы