2014-04-14 34 views
0

擴展課程時是否是猴子補丁?什麼是猴子修補,爲什麼它如此可惡?

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

的[?什麼是「猴子補丁」正是在Ruby中平均(可能重複http://stackoverflow.com/questions/394144/what-do-monkey-patching-exactly-mean-in-ruby) –

+0

你第二類只是一個擴展另一個類的類。我不認爲它與monkeypatching相關如何 – njzk2

+0

'重複'並沒有說明你應該如何正確地擴展一個類。 – Starkers

回答

0

我不會說猴子補丁不好,它更像是一個「應該避免」的做法,肯定有場景,猴子補丁是有用的。

另一種方式來解決這個問題是通過繼承,所以你可能會碰到這樣的:

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