【发布时间】:2013-07-14 00:21:59
【问题描述】:
我无法在方法体内对类进行修补。
在方法定义中, 我试图以两种方式使用一个类:
1] 创建一个实例并在我正在使用的类中使用方法的原始定义
2] Monkey 修补 (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) 我试图在其中修补类,因为我试图在方法内更改类。
如何在方法中实现猴子修补类?
谢谢
【问题讨论】:
-
您收到上述错误了吗?哪个错误?它是 c,而不是类的 C。
-
对不起,如果您浏览了代码,您可能会错过代码中标记的错误。为了清楚起见再写一遍
-
有点不相关,但我很确定
//不会在 ruby 中标记评论 -
我更改了问题的一些措辞以使其更清楚。希望这可以重新打开,因为它是一个真正的编程问题,并且我需要一个真正的用例。谢谢
-
这个问题没有什么不清楚的地方!!!
标签: ruby ruby-on-rails-3 metaprogramming monkeypatching