【发布时间】:2013-10-08 02:15:35
【问题描述】:
我有一个类 Parent 和一个类 Child(它是 Parent 的 child 子类)。
-
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
它有效。我猜。但感觉真的很hackish。另外,这样做的一个缺点是,如果我想在定义 bbbb 之前或之后使用相同的名称扩展 aaaa,事情会变得有点奇怪。
有没有更简单的方法来实现这一点?
【问题讨论】:
-
问题是……为什么?!
-
我可以看到这样做的原因。这个问题对如何处理有一些想法:stackoverflow.com/questions/2564391/…
-
“孩子”是什么意思?你是说子类吗?
-
您似乎在以一种误导的方式使用“扩展”一词。该术语保留的意思与您可能的意思不同。您应该使用不同的术语。
-
@sawa:谢谢。你会建议我使用什么?
标签: ruby class inheritance