6

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

以下是每个示例:

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
4

1 回答 1

7

这最终是相当主观的,但我将一一解决每个选项:

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

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

  • 类实例变量的……因为它是这里唯一有意义的变量(尽管名称可能不是,从技术上讲,它是一个模块实例变量,但这相当迂腐)。这是三者中唯一一个既具有修改语义意义又被某个范围封装的。

于 2012-05-28T03:15:50.707 回答