兩用模組(改進或全域性補丁)

使用 Refinements 對補丁進行範圍化是一種很好的做法,但有時在全域性載入它(例如在開發或測試中)是很好的。

比如說,你想啟動一個控制檯,需要你的庫,然後在全域性範圍內使用修補的方法。你不能通過改進來做到這一點,因為需要在類/模組定義中呼叫 using。但是有可能以這樣的方式編寫程式碼:它具有雙重目的:

module Patch
  def patched?; true; end
  refine String do
    include Patch
  end
end

# globally
String.include Patch
"".patched? # => true

# refinement
class LoadPatch
  using Patch
  "".patched? # => true
end