安全猴修补精炼
从 Ruby 2.0 开始,Ruby 允许通过改进提供更安全的 Monkey Patching。基本上它允许限制 Monkey Patched 代码仅在请求时应用。
首先,我们在模块中创建一个细化:
module RefiningString
refine String do
def reverse
"Hell riders"
end
end
end
然后我们可以决定在哪里使用它:
class AClassWithoutMP
def initialize(str)
@str = str
end
def reverse
@str.reverse
end
end
class AClassWithMP
using RefiningString
def initialize(str)
@str = str
end
def reverse
str.reverse
end
end
AClassWithoutMP.new("hello".reverse # => "olle"
AClassWithMP.new("hello").reverse # "Hell riders"