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

Vol*_*ort 1 ruby inheritance class

我有一个类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
Run Code Online (Sandbox Code Playgroud)

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

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

saw*_*awa 5

class Parent
  def aaaa
    print "A"
  end
end

class Child < Parent
  def aaaa
    super
    print "B"
  end
  alias bbbb :aaaa
end
Run Code Online (Sandbox Code Playgroud)