2014-05-18 81 views
1

是否有任何使用常量而不是返回像這樣的常量的方法?我可以使用方法而不是常量嗎?

class Foo 
    LETTERS = [:a, :b, :c] 
    # and them call it Foo::LETTERS 
end 

# or 
class Foo 
    def self.letters 
    [:a, :b, :c] 
    # and then call it Foo.letters, more simplier 
    end 
end 

我只能看到一個第一種方法的優點是:警告試圖重新定義常量時,但它是罕見的情況下,我想。

+2

第二種方法在每次調用'Foo.letters'時創建一個新數組... –

+0

@UriAgassi您的評論我想可能是一個很好的答案。 –

+0

根據您當前的上下文,我認爲第一種方法很好,如果您不想在每次訪問'LETTERS'時返回不同的數組對象。 –

回答

4

第二種方法每次調用方法Foo.letters時都會創建一個新陣列。這當然可以通過保存的值固定:

class Foo 
    def self.letters 
    @letters ||= [:a, :b, :c] 
    end 
end 

此外,有繼承,每種方式這樣一個類時,一些行爲改變(見「How to use an overridden constant in an inheritanced class」)

就個人而言,我不看看Foo.lettersFoo::LETTERS簡單多了嗎?我認爲常量應該用於常量,並且靜態方法有它們自己的用例...

相關問題