安全猴修補精煉

從 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"