猴子修補範圍有限

猴子修補的主要問題是它汙染了全域性範圍。你的程式碼工作受到你使用的所有模組的支配,而不是踩到彼此的腳趾。Ruby 的解決方案是改進,基本上是有限範圍內的猴子補丁。

module Patches
  refine Fixnum do
    def plus_one
      self + 1
    end

    def plus(num)
      self + num
    end

    def concat_one
      self.to_s + '1'
    end
  end
end

class RefinementTest
  # has access to our patches
  using Patches

  def initialize
    puts 1.plus_one
    puts 3.concat_one
  end
end

# Main scope doesn't have changes

1.plus_one
# => undefined method `plus_one' for 1:Fixnum (NoMethodError)

RefinementTest.new
# => 2
# => '31'