0

无论哪种方式,我都可以做一些简单的任务,

改进

module StringRefinements
  refine String do
    def do_something
      "bla bla bla..."
    end
  end
end

所以,我可以在模块所在的do_something任何地方使用方法。StringRefinementsusing

猴子补丁

class String
  def do_something
    "bla bla bla..."
  end
end

我想知道 Ruby 的新概念RefinementsMonkeypatch. 使用Refinementsover有什么好处Monkeypatch

4

1 回答 1

1

改进和猴子补丁之间最显着的区别是猴子补丁会更改应用程序中的每个实例。当您添加一个原本不存在的方法时,这可能不是问题,但是当您重新定义现有方法时,它很容易打破代码中其他地方的期望。

当您使用细化时,行为只会在您使用using方法激活细化的地方发生变化。这更安全,因为您更改的方法不能“泄漏”到您的其余代码(或依赖项)中。

于 2015-11-05T16:23:45.240 回答