我正在使用开发脚本文件来检查新的可能的想法。最近我试图从该脚本文件中修改MyDBObject补丁。 假设一个空的dev.rb文件并在顶部添加一个猴子补丁,如下所示:
class MyDBObject
def test_function
'function works'
end
end
启动pry控制台并加载文件会产生随机结果。 首先我收到了:
NoMethodError: undefined method `relations' for MyDBObject:Class
稍后加载了脚本,但我再也无法访问原始类:
undefined method `first' for MyDBObject:Class
我注意到前面的行:
MyDBObject
在猴子修补之前,实现了预期的功能。 这似乎是类对象的某种延迟加载。有人可以为我说明这个吗?
答案 0 :(得分:0)
根据加载源文件的顺序,您要么重新定义整个类,要么替换更改。
我强烈建议您阅读:http://www.justinweiss.com/articles/3-ways-to-monkey-patch-without-making-a-mess/(TLDR - 将您的补丁放入模块并明确包含它)