0
class Base
  def sam
    "I m the base"
  end

  def self.inherited(base)
    alias_method :old_sam, :sam
    base.class_eval do
      def sam
        old_sam 
        p "Inside inherited"
      end
    end
    super
  end
end

class Derived < Base
  def sam
   p "Inside Derived"
  end
end

当 Derived.new.sam => "内部派生"

但我期待

“内部派生”

“内部继承”

红宝石新手。任何帮助将不胜感激。

4

1 回答 1

0

您只是简单地覆盖base.class_evalsam.Derived

如果您sam从以下位置删除该方法Derived

class Derived < Base
end

你会得到:

#=> "Inside inherited"
#=> ArgumentError: wrong number of arguments (given 1, expected 0)

后者是因为您将参数传递给old_sam方法,而该方法不接受它:

old_sam p "Inside inherited"

但我期待

“内部派生”

“内部继承”

这在您的设置中是不可能的,因为您所做的是首先samclass_eval块中为所有降级类定义一个实例方法,但后来只是覆盖。

于 2017-02-03T11:02:36.600 回答