兩用模組(改進或全域性補丁)
使用 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