2012-10-28 160 views
2

我正在創建一個圖形庫寶石。如何創建一個寶石模塊?

當創建一個gem時,似乎重要的是要確保與其他gem或其他代碼沒有衝突。

例如,擴展名(monkeypatch)方法從我的寶石代碼中調用。

class Array 
    def sum 
    inject(0.0) { |result, el| result + el } 
    end 

因此,該解決方案似乎是一個模塊。

如何創建一個模塊,並確保在下載和使用其他代碼時與其他代碼沒有衝突?

+6

無論如何,創建一個模塊不會幫助你,如果你只是將它混合到核心類。你應該避免修補核心類。期。 – d11wtq

+0

好的,那麼實現Array#sum功能的更好方法是什麼? –

+1

子類數組並使用您的子類代替。我認爲你做了比#sum更復雜的事情,但是,因爲那只是'arr.reduce(:+)'。 – d11wtq

回答

3

你只是這樣做。創建一個模塊,並使用它:

module MyLibrary 
    class MyGraphicsClass 
    # ... 
    end 
end 

沒有辦法有助於防止猴子補丁從踩別人的腳趾。沒有辦法阻止您修改Array以潛在地破壞其他人的代碼。解決辦法是不是那麼做。修補標準庫的基本部分是一種可怕的做法,也是確保沒有人想要觸摸你的寶石的好方法。