나는 당신의 질문을 이해하지 못합니다. 앞으로는 정확하게하려고하는 것이 무엇인지, 가능하면 실행 가능한 테스트 스위트의 형식을 제공하여 우리의 대답 이 정말로에 대한 답을 찾을 수 있도록하십시오.
아마도 이런 말을하고 계십니까? 이 같은
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
모호한 질문에 대한 미안하지만, 당신은 확실히 내가 묻고 있었는지의 요점을 얻었다. 고맙습니다 –