Ruby2.0:Ruby Refinements和Monkeypatches有什么区别?

时间:2015-08-04 19:27:52

标签: ruby refinements

我可以用任何一种方式做一些简单的任务,

加细

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

因此,只要do_something模块为StringRefinements,就可以使用using方法。

猴补丁

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

我想知道Ruby的新概念RefinementsMonkeypatch之间的区别。使用Refinements优于Monkeypatch的优势是什么?

1 个答案:

答案 0 :(得分:1)

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

使用细化时,仅在使用using方法激活细化的位置更改行为。这样更安全,因为您更改的方法不会“泄漏”到其余代码(或依赖项)中。