2012-05-28 147 views
4

一般來說,哪種更適合全局緩存:全局變量,常量或類實例變量?全局緩存的全局變量vs.常量與類實例變量

下面是每個的例子:

module Foo 
    $FOO_CACHE = {} 
    def self.access_to_cache 
    $FOO_CACHE 
    end 
end 

module Foo 
    CACHE = {} 
    def self.access_to_cache 
    CACHE 
    end 
end 

module Foo 
    @cache = {} 
    def self.access_to_cache 
    @cache 
    end 
end 

回答

5

這最終是相當主觀的,但我會針對每個選項一個接一個:

  • 全局變量沒有 ...因爲在一個模塊(或者一個類或者其他任何東西)中放置一個全局變量沒有什麼意義,反正它在任何地方都是範圍的。除了事實上,如果你可以使用全局變量以外的東西,你應該總是這樣做。

  • 常量 ...因爲緩存不是恆定的!雖然Ruby不強制常量不能改變,但這並不意味着你應該這樣做。他們被稱爲常量是有原因的。

  • 類實例變量 ...因爲它是這裏的唯一一個讓任何意義(雖然可能沒有,在技術上這是一個模塊實例變量,不過這名字是相當迂腐)。這是三者中唯一一個能夠修改語義並被某個範圍封裝的程序。

+0

很好的解釋!但是如果我想在多個模塊/類/文件中使用/ init變量呢? 我不想使用類/模塊實例變量,因爲我不想爲了使用其變量而初始化類。 所以我留下了2個選擇,類變量/常量或全局變量。 在這種情況下哪個更好? – Swaps

+0

@Swaps正如我在回答中所說的:如果您可以使用除全局變量之外的其他東西,那麼這是更好的選擇(並且您幾乎總是可以)。 –