Ruby on rails ruby self.u方法 类基 戴夫·萨姆 “我是基地” 结束 def self.inherited(基本) 别名\u方法:old\u sam,:sam 基本类\u评估do 戴夫·萨姆 老山姆 p“内部继承” 结束 结束 超级的 结束 结束 类派生“内部派生”

Ruby on rails ruby self.u方法 类基 戴夫·萨姆 “我是基地” 结束 def self.inherited(基本) 别名\u方法:old\u sam,:sam 基本类\u评估do 戴夫·萨姆 老山姆 p“内部继承” 结束 结束 超级的 结束 结束 类派生“内部派生”,ruby-on-rails,ruby,inheritance,alias-method,Ruby On Rails,Ruby,Inheritance,Alias Method,派生时。new.sam=>“内部派生” 但我想 “内部派生” “内部继承” ruby新手。任何帮助都将不胜感激 您只需覆盖派生的中由基.class\u eval方法定义的sam 如果将方法sam从Derived中删除: class Base def sam "I m the base" end def self.inherited(base) alias_method :old_sam, :sam base.class_eval do def s

派生时。new.sam=>“内部派生”

但我想

“内部派生”

“内部继承”


ruby新手。任何帮助都将不胜感激

您只需覆盖
派生的
中由
基.class\u eval
方法定义的
sam

如果将方法
sam
Derived
中删除:

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
后者是因为您正在将一个参数传递给
old_sam
方法,该方法不接受该参数:

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

“内部派生”

“内部继承”


这在您的设置中是不可能的,因为您首先要做的是在所有降序类的
class\u eval
块中定义一个实例方法
sam
,但稍后只是在中重写。

谢谢Andrey。old_sam方法不接受任何参数,现在代码也相应地更改了。对此很抱歉。@Raj我回答了你的问题,一直编辑它不是一个好的选择,现在也没有意义,因为它不会改变给出的答案。
#=> "Inside inherited"
#=> ArgumentError: wrong number of arguments (given 1, expected 0)
old_sam p "Inside inherited"