我可以用任何一种方式做一些简单的任务,
加细
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的新概念Refinements
和Monkeypatch
之间的区别。使用Refinements
优于Monkeypatch
的优势是什么?
答案 0 :(得分:1)
改进和猴子修补之间最重要的区别是,猴子修补会更改应用程序中的每个实例。当您添加一个不存在的方法时,这可能不是问题,但是当您重新定义现有方法时,它很容易打破代码中其他地方的期望。
使用细化时,仅在使用using
方法激活细化的位置更改行为。这样更安全,因为您更改的方法不会“泄漏”到其余代码(或依赖项)中。