全局变量与常量对比全局高速缓存的类实例变量

时间:2012-05-28 03:09:23

标签: ruby

一般来说哪个更适合全局缓存:全局变量,常量或类实例变量?

以下是每个例子:

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

1 个答案:

答案 0 :(得分:5)

这最终是非常主观的,但我会逐一解决每个选项:

  • 全局变量没有 ...因为将一个全局变量放在一个模块(或一个类或任何东西)中没有多大意义无论如何,它将在各地都有。除了你可以使用除全局变量以外的东西之外,你应该总是这样做。

  • 常量 ...因为缓存不是常量!虽然Ruby没有强制执行常量不能改变,但这并不意味着你应该这样做。他们被称为常数是有原因的。

  • 类实例变量 ...因为它是唯一有意义的(虽然名称可能没有,但从技术上来说这是一个模块实例变量,但这是相当迂腐的)。这是三者中唯一一个都具有语义意义的修改,并被某个范围封装。