2012-06-05 15 views

Antwort

3

IMO eine "Konstante", weil es in Verbindung steht, dass es sein soll ... konstant.

Globale implizieren nicht, dass sie nicht mutiert werden sollten.

+2

Ja. Eine andere Lösung, die in Betracht gezogen werden könnte, wäre, die Klassen so zu erweitern, dass sie etwas wie 'Memcache.connection' und' Redis.connection' enthalten (ein bisschen wie 'ActiveRecord :: Base.connection'), obwohl es etwas umständlich sein könnte, mit diesen zu codieren wenn sie viel benutzt werden, aber so sind die "Konstanten" an ihren Ursprung gebunden. – Casper

+0

@Casper Wahrscheinlich noch bessere Idee, ja. –

9

Sie sind nicht gleichwertige Konstrukte. Abhängig von Ihrer Anwendung können sie nicht austauschbar sein, aber sie sind semantisch unterschiedlich.

# 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 für die zusätzlichen Informationen - guter Punkt. –

36

Sie könnten Redis.current Mehr Infos here

Zum Beispiel in einem Initialisierer verwenden möchten:

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

Und dann in der anderen Klassen:

def stars 
    redis.smembers("stars") 
end 

private 

def redis 
    Redis.current 
end 
+0

Gute Lösung für "Führe keine globalen Variablen ein." Fehler von rubocop gem. – leo