一般来说哪个更适合全局缓存:全局变量,常量或类实例变量?
以下是每个例子:
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
答案 0 :(得分:5)
这最终是非常主观的,但我会逐一解决每个选项:
全局变量:没有 ...因为将一个全局变量放在一个模块(或一个类或任何东西)中没有多大意义无论如何,它将在各地都有。除了你可以使用除全局变量以外的东西之外,你应该总是这样做。
常量:否 ...因为缓存不是常量!虽然Ruby没有强制执行常量不能改变,但这并不意味着你应该这样做。他们被称为常数是有原因的。
类实例变量:是 ...因为它是唯一有意义的(虽然名称可能没有,但从技术上来说这是一个模块实例变量,但这是相当迂腐的)。这是三者中唯一一个都具有语义意义的修改,并被某个范围封装。