使用不同命名的方法扩展Ruby父类的方法

时间:2013-10-08 02:15:36

标签: ruby class inheritance

我有一个班级Parent和一个班级ChildParent子类。)

  • 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

工作。我猜。但它感到非常hackish。另外,这样做的一个缺点是,如果我想在定义aaaa之前或之后使用相同的名称扩展bbbb,事情就会变得有些奇怪。

有没有更简单的方法来实现这个目标?

1 个答案:

答案 0 :(得分:5)

class Parent
  def aaaa
    print "A"
  end
end

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