什么是猴子修补,为什么它如此可恶?

时间:2014-04-14 20:18:51

标签: monkeypatching

扩展课程时是否有猴子补丁?

class Hash
    def delete_blanks!
       delete_if { |k, v| v.is_nil? }
    end
end

然后你可以这样做:

h = { red: 'stop', yellow: 'ready', purple: nil, green: 'go'}
h.delete_blanks! #=> { red: 'stop', yellow: 'ready', green: 'go' }
那是一个猴子补丁吗?那怎么样:

class ActiveRecord::Base
    def foo
        "bar"
    end
end

那是怎么回事?

我没有争论,我已经准备好认为它很糟糕,但是如果没有猴子补丁,我该如何去模仿这种行为呢?我应该send这个方法吗?

1 个答案:

答案 0 :(得分:0)

我不会说猴子补丁很糟糕,它更像是"应该避免"实践中,肯定有猴子补丁很有用的场景。

解决此问题的另一种方法是通过继承,因此您可以使用以下内容:

class SuperHash < Hash
  def delete_blanks!
    delete_if { |k, v| v.is_nil? }
  end
end