扩展课程时是否有猴子补丁?
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
这个方法吗?
答案 0 :(得分:0)
我不会说猴子补丁很糟糕,它更像是"应该避免"实践中,肯定有猴子补丁很有用的场景。
解决此问题的另一种方法是通过继承,因此您可以使用以下内容:
class SuperHash < Hash
def delete_blanks!
delete_if { |k, v| v.is_nil? }
end
end