У меня есть класс 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
, все становится немного странным.
Есть ли более простой способ достичь этого?
Вопрос ... * почему * ?! – Pete
Я видел причины для этого. У этого вопроса есть некоторые мысли о том, как с этим справиться: http://stackoverflow.com/questions/2564391/how-do-i-call-a-super-class-method – timpone
Что значит «ребенок»? Вы имеете в виду подкласс? – sawa