Ruby Language Patch de singe à portée limitée


Exemple

Le principal problème de la correction des singes est qu’elle pollue la portée globale. Votre code de travail est à la merci de tous les modules que vous utilisez sans marcher sur les pieds les uns des autres. La solution Ruby à cela est des améliorations, qui sont essentiellement des patchs de singe dans une portée limitée.

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'