2012-06-05 10 views
16

Powiedzmy, że mamy połączenie z memcache lub redis ... który styl jest preferowany i dlaczego?Użyj zmiennej globalnej lub stałej w Ruby/Rails?

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

LUB

$memcache = Memcache.new(...) 
$redis = Redis.new(...) 
+0

myślę, że to byłby lepszy dla [CodeReview.SE]. –

Odpowiedz

3

IMO jest "stała", ponieważ komunikuje, że to miało być ... stała.

Globały nie sugerują, że nie powinny być zmutowane.

+2

Tak. Innym rozwiązaniem, które należy wziąć pod uwagę, może być rozszerzenie klasy tak, aby zawierało coś w rodzaju 'Memcache.connection' i' Redis.connection', (trochę jak 'ActiveRecord :: Base.connection'), chociaż może być trochę bardziej szczegółowe, aby kodować z tymi klasami. jeśli są dużo używane, ale w ten sposób "stałe" są związane z ich pochodzeniem. – Casper

+0

@Casper Prawdopodobnie jeszcze lepszy pomysł, tak. –

9

Nie są one równoważnymi konstrukcjami. W zależności od aplikacji mogą one, ale nie muszą być zamienne, ale różnią się między sobą.

# 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(...) 
+1

+1 za dodatkowe informacje - dobry punkt. –

36

Możesz chcieć użyć Redis.current Więcej informacji here

Na przykład, do inicjowania:

Redis.current = Redis.new(host: 'localhost', port: 6379) 

A potem w swoich innych zajęć:

def stars 
    redis.smembers("stars") 
end 

private 

def redis 
    Redis.current 
end 
+0

Dobre rozwiązanie "Nie wprowadzaj zmiennych globalnych". błędy za pomocą klejnotu Rubocop. – leo

Powiązane problemy