2012-05-28 191 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正如我在回答中所说的:如果您可以使用除全局变量之外的其他东西,那么这是更好的选择(并且您几乎总是可以)。 –