1

我有如下情况:

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实习生。

请提出一种方法来做到这一点。

4

1 回答 1

1

为了在这种情况下进行猴子补丁,我们需要在 lib 文件夹中包含一个文件。在这种情况下,您需要在同名的 lib 文件夹中创建一个文件。其中首先包含模块 TASK,然后在其中使用MODULENAME.module_eval和添加方法。在此文件中,您可以覆盖实际模块中的方法并向其添加方法。为了使它工作,您必须要求您在 config/initializers/app.rb 中的 lib 中创建的文件

如果您正在使用的模块存在于文件夹中(例如在 ruby​​ gem 的情况下),您需要包含整个路径。例如。

Module_1.Module_2.module_eval

其中模块 2 在模块 1 内。

于 2013-02-06T05:55:38.687 回答