Ruby on rails 在Ruby/Rails中使用全局变量还是常量变量?

Ruby on rails 在Ruby/Rails中使用全局变量还是常量变量?,ruby-on-rails,ruby,Ruby On Rails,Ruby,假设我们连接到memcache或redis。。。首选哪种风格?为什么 MEMCACHE = Memcache.new(...) REDIS = Redis.new(...) 或 IMO是一个“常数”,因为它传达了它应该是。。。不变的 全局变量并不意味着它们不应该变异。它们不是等价的结构。根据您的应用程序,它们可能是可互换的,也可能不是可互换的,但它们在语义上是不同的 # MEMCACHE is a constant, subject to scoping constraints. MEMCAC

假设我们连接到memcache或redis。。。首选哪种风格?为什么

MEMCACHE = Memcache.new(...)
REDIS = Redis.new(...)

IMO是一个“常数”,因为它传达了它应该是。。。不变的


全局变量并不意味着它们不应该变异。

它们不是等价的结构。根据您的应用程序,它们可能是可互换的,也可能不是可互换的,但它们在语义上是不同的

# MEMCACHE is a constant, subject to scoping constraints.
MEMCACHE = Memcache.new(...)

# $memcache is a global variable: declare it anywhere; use it anywhere.
$memcache = Memcache.new(...)

您可能需要使用Redis.current更多信息

例如,在初始值设定项中:

Redis.current = Redis.new(host: 'localhost', port: 6379)
然后在你的其他课程中:

def stars
  redis.smembers("stars")
end

private

def redis
  Redis.current
end

我想这更适合你。是的。另一个要考虑的解决方案可能是扩展类,包括“代码> MyCask.Cuth< <代码>和<代码> ReIS.CONTION/CODE >,(有点像<代码> ActureCordR::Basic。连接< /COD>),但是如果它们被大量使用,代码可能会有点冗长,但是这样“常量”。与它们的起源有关。@Casper可能是更好的主意,是的。这是“不引入全局变量”的好解决方案。错误由RubocopGem提供。
def stars
  redis.smembers("stars")
end

private

def redis
  Redis.current
end