我无法在方法体内修补类。
在方法定义中,我尝试以两种方式使用类:
1]创建一个实例并在我正在使用的类中使用方法的原始定义
2]猴子补丁(pverride)类中的方法,现在使用具有新方法定义的实例。
基本上我会在我的程序中使用上述两个类的实例。
挑战是我要覆盖的方法在初始化期间被调用,所以我必须在创建类的实例之前覆盖它。
这是一个小模型:
class A
def initialize
do_something
end
def do something
#implementation
end
end
现在,我想在同一个方法中使用 A 两次,但一次使用修改版本的 do_something 这就是我尝试这样做的方式:
def my_method
orig_instance = A.new
#patch the class
Class A # ERROR: CLASS DEF IN METHOD BODY
class << self
alias_method :old_do_something, :do_something
def self.do_something
# new implementation
end
end
new_instance = A.new
#restore method
class << self
alias_method :do_something,:old_do_something
def self.do_something
# new implementation
end
end
end # end of method
我得到 (ERROR: CLASS DEF IN METHOD BODY) 我试图对类进行修补,因为我试图在方法内更改类。
如何在方法中实现猴子修补类?
谢谢