Использовать глобальную или постоянную переменную в Ruby/Rails?
Скажем, у нас есть соединение с memcache или redis... какой стиль является предпочтительным и почему?
MEMCACHE = Memcache.new(...)
REDIS = Redis.new(...)
ИЛИ
$memcache = Memcache.new(...)
$redis = Redis.new(...)
Ответы
Ответ 1
Возможно, вы захотите использовать Redis.current
Подробнее здесь
Например, в инициализаторе:
Redis.current = Redis.new(host: 'localhost', port: 6379)
И затем в других классах:
def stars
redis.smembers("stars")
end
private
def redis
Redis.current
end
Ответ 2
Они не являются эквивалентными конструкциями. В зависимости от вашего приложения они могут быть или не быть взаимозаменяемыми, но они семантически отличаются.
# 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(...)
Ответ 3
IMO "константа", потому что она сообщает, что она должна быть... постоянной.
Глобалы не подразумевают, что они не должны быть мутированы.