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

tra*_*ans 5 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
Run Code Online (Sandbox Code Playgroud)

And*_*all 6

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

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

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

  • 类实例变量:是的 ...因为它是这里唯一有意义的(虽然名称可能没有,但从技术上来说这是一个模块实例变量,但那是相当迂腐的).这是三者中唯一一个既具有语义意义又需要修改的内容,并且由某个范围封装.