猴子修補範圍有限
猴子修補的主要問題是它汙染了全域性範圍。你的程式碼工作受到你使用的所有模組的支配,而不是踩到彼此的腳趾。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'