Ruby 全局缓存的全局变量vs.常量vs.类实例变量
一般来说,全局缓存哪个更好:全局变量、常量还是类实例变量 以下是每种方法的示例:Ruby 全局缓存的全局变量vs.常量vs.类实例变量,ruby,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
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没有强制执行常量不能更改,但这并不意味着您应该这样做。它们被称为常量是有原因的
- 类实例变量:是的……因为它是这里唯一有意义的变量(虽然名称可能没有意义,但从技术上讲,它是一个模块实例变量,但这相当迂腐)。这是三个中唯一一个可以修改语义的,并且被某个范围封装的