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

有效。我猜。但感觉真的很hackish。另外,这样做的一个缺点是,如果我想aaaa在定义之前或之后使用相同的名称进行扩展bbbb,事情就会变得有点奇怪。

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

4

2 回答 2

5
class Parent
  def aaaa
    print "A"
  end
end

class Child < Parent
  def aaaa
    super
    print "B"
  end
  alias bbbb :aaaa
end
于 2013-10-08T02:53:17.083 回答
0

谢谢上面的回答@sawa 下面我喜欢分享我的用例:超级是按订单工作!

   class Parent
      def aaaa
        print "A"
      end
    end
    
    class Child < Parent
      def aaaa
        super
        print "B"
      end
      alias bbbb :aaaa
    end
    
    Class Grand < Child
      def aaaa
        print "C"
        super
      end
    end
    => :aaa
    
    g = Grand.new
    g.aaaa #=> CAB
于 2021-09-30T19:51:53.380 回答