如何在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谢谢你的评论:)