我有如下情况:
Module Task
def get(a)
fetch(a)
end
def fetch(a)
query(a)
end
def query(a)
puts a
end
end
并且只有get
方法是从模块外部调用的
Task.get('name')
我想猴子补丁唯一的方法query
来对方法的响应做出一些改变,get
因为它调用query
实习生。
请提出一种方法来做到这一点。
我有如下情况:
Module Task
def get(a)
fetch(a)
end
def fetch(a)
query(a)
end
def query(a)
puts a
end
end
并且只有get
方法是从模块外部调用的
Task.get('name')
我想猴子补丁唯一的方法query
来对方法的响应做出一些改变,get
因为它调用query
实习生。
请提出一种方法来做到这一点。
为了在这种情况下进行猴子补丁,我们需要在 lib 文件夹中包含一个文件。在这种情况下,您需要在同名的 lib 文件夹中创建一个文件。其中首先包含模块 TASK,然后在其中使用MODULENAME.module_eval
和添加方法。在此文件中,您可以覆盖实际模块中的方法并向其添加方法。为了使它工作,您必须要求您在 config/initializers/app.rb 中的 lib 中创建的文件
如果您正在使用的模块存在于文件夹中(例如在 ruby gem 的情况下),您需要包含整个路径。例如。
Module_1.Module_2.module_eval
其中模块 2 在模块 1 内。