以下所有def调用的Ruby调用方法?
我见过一些代码,它们使类方法可以编写以下所有def调用的Ruby调用方法?,ruby,Ruby,我见过一些代码,它们使类方法可以编写 class_method :instance_method, 别名实例\u方法,并在每次调用时从包装器方法中调用它。有没有一种方法可以调用class\u方法并将其应用于以下所有定义调用(例如private如何工作)?我不太理解您的问题。在将来,请提供您正试图做的具体说明,最好是以可执行测试套件的形式,这样我们就可以自己检查我们的答案是否真的回答了您的问题 你是不是在说这样的事 module MethodHook private def class
class_method :instance_method,
别名
实例\u方法
,并在每次调用时从包装器方法中调用它。有没有一种方法可以调用class\u方法
并将其应用于以下所有定义调用(例如private
如何工作)?我不太理解您的问题。在将来,请提供您正试图做的具体说明,最好是以可执行测试套件的形式,这样我们就可以自己检查我们的答案是否真的回答了您的问题
你是不是在说这样的事
module MethodHook
private
def class_method(m=nil)
return if @__recursing__ # prevent infinite recursion
return @__class_method__ = true unless m
@__recursing__ = true
old_m = instance_method(m)
define_method(m) do |*args, &block|
puts "before #{m}(#{args.join(', ')})" # wrap wrap wrap
old_m.bind(self).(*args, &block)
puts "after #{m}" # more wrapping
end
@__recursing__ = nil
end
def method_added(m)
class_method(m) if @__class_method__
super
end
end
这样使用:
class Foo
extend MethodHook
def unwrapped
puts __method__
end
class_method
def wrapped
puts __method__
end
end
f = Foo.new
f.unwrapped
# unwrapped
f.wrapped
# before wrapped()
# wrapped
# after wrapped
class Foo
class_method(:unwrapped)
end
f.unwrapped
# before unwrapped()
# wrapped
# after unwrapped
很抱歉这个模糊的问题,但你肯定知道我问的要点。非常感谢。