2011-01-28 28 views
10

(StackOverflow上告訴我,這個問題是「主觀的,有可能被關門」 ......嗯,我給它無論一個鏡頭)Ruby中的命名空間函數的最佳實踐? (新手問題)

我寫了一堆的輔助方法(對於TextMate包),我想(我需要)將它們整齊地命名空間。

這些方法實際上只是功能,即它們不在任何超出其範圍的操作上進行操作,因此不屬於某個類。沒有什麼需要實例化的。

到目前爲止,我一直在做這做那工作得很好

module Helpers::Foo 
    module_function 
    def bar 
     # ... 
    end 
end 
Helpers::Foo.bar # this is how I'd like to call the method/function 

但它會更好:
1.跳過module_function和申報方法/功能self.*
2.或者宣佈一個班級而不是一個模塊會更好嗎?
3.或者使用class << self(在模塊或類中)?
4.或完全是其他的東西?

我意識到這是一個非常開放的問題,但我真的只是想聽聽人們在做什麼。

回答

8

,我不是選

module Foo 
    def self.bar 
    "bar" 
    end 
end 

Foo.bar #=> "bar" 

module Foo 
    def Foo.bar 
    "bar" 
    end 
end 

Foo.bar #=> "bar" 

,但可能傾向於前者瘦,我覺得self.真的是描述性的。

編輯:閱讀評論後,我提出了第三個選項,我更喜歡可讀性。從技術上講,我認爲這將被定義爲擴展Eigen類中包含的方法。

module Foo 
    module ClassMethods 
    def baz 
     "baz" 
    end 
    end 
    extend ClassMethods 
end 

Foo.baz #=> "baz" 
+0

+1爲前者,又名自我。 – 2011-01-29 09:13:30