Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中修补继承的钩子?_Ruby - Fatal编程技术网

如何在ruby中修补继承的钩子?

如何在ruby中修补继承的钩子?,ruby,Ruby,这只是一个简单的例子 class Base def self.inherited(child) p 'Base.inherited' end end class User < Base p 'User' end 这很好,但是如何修补基类的继承的钩子呢 假设我希望我的结果是 "Base.inherited" "Something inherited" "User" 并且仍然让我的用户类继承基类 有什么想法和解决办法吗 谢谢 module Foo def self

这只是一个简单的例子

class Base
  def self.inherited(child)
    p 'Base.inherited'
  end
end

class User < Base
  p 'User'
end
这很好,但是如何修补基类的
继承的
钩子呢

假设我希望我的结果是

"Base.inherited"
"Something inherited"
"User"
并且仍然让我的用户类继承基类

有什么想法和解决办法吗

谢谢

module Foo
  def self.included(child)
    p "Something inherited"
  end
end

class Base
  def self.inherited(child)
    p 'Base.inherited'
  end
end

class User < Base
    include Foo
    p 'User'
end

# >> "Base.inherited"
# >> "Something inherited"
# >> "User"

更新问题,使其更具体

我需要在类用户继承基而不修改用户类的时候运行一些代码

假设我有一个基类,它是由
继承的
方法定义的。一方面,我不知道还有哪些类将继承Base。另一方面,我不能修改基类的原始继承方法

那么我如何修补这个方法呢

谢谢

模块Foo
module Foo
  def self.included(child)
    p "Something inherited"
  end
end

class Base
  def self.inherited(child)
    p 'Base.inherited'
  end
end

class User < Base
    include Foo
    p 'User'
end

# >> "Base.inherited"
# >> "Something inherited"
# >> "User"
def包括在内(儿童) p“遗传的东西” 结束 结束 阶级基础 def self.inherited(子项) p‘Base.inherited’ 结束 结束 类用户>“基本。继承” #>>“继承的东西” #>>“用户”
找到了答案

在这种情况下,别名链接可以正常工作。出于某种原因,我认为它适用于普通方法,但不适用于ruby回调

class Base
  def self.inherited(child)
    p 'Base.inherited'
  end
end

Base.class_eval do
  class << self
    alias_method :chained_inherited, :inherited

    def inherited(child)
      chained_inherited(child)
      p 'Inherited'
    end
  end
end

class User < Base
  p 'User'
end

# => "Base.inherited"
# => "Inherited"
# => "User"
类基
def self.inherited(子项)
p‘Base.inherited’
结束
结束
基本类\u评估do
类“Base.inherited”
#=>“继承的”
#=>“用户”

什么是“继承的东西”?给出想法。尤金,如果你的问题得到了回答,你应该检查对你帮助最大的答案。@CarySwoveland谢谢你的评论:)