一般来说,全局缓存哪个更好:全局变量、常量还是类实例变量?
以下是每个示例:
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
这最终是非常主观的,但我将逐一解决每个选项:
-
全局变量:否...因为将全局变量放在模块(或类或任何与此相关的内容)中没有多大意义,因此无论如何它都会在任何地方范围内。除了这样一个事实之外,如果你可以使用全局变量以外的其他东西,你应该总是这样做。
-
常数:无...因为缓存不是恒定的!虽然 Ruby 没有强制要求常量不能改变,但这并不意味着你应该这样做。它们被称为常量是有原因的。
-
类实例变量:是的...因为它是这里唯一有意义的一个(尽管名称可能没有,从技术上讲,它是一个模块实例变量,但这相当迂腐)。这是三者中唯一一个既具有语义意义即可修改并且由某个范围封装的。