2012-06-05 32 views

Trả lời

3

IMO một "hằng số", bởi vì nó liên lạc mà nó cho là ... không đổi.

Toàn cầu không ngụ ý rằng chúng không nên bị đột biến.

+2

Có. Một giải pháp khác để xem xét có thể là mở rộng các lớp để bao gồm một cái gì đó như 'Memcache.connection' và' Redis.connection', (giống như 'ActiveRecord :: Base.connection') mặc dù nó có thể nhận được một chút tiết để mã với những nếu chúng được sử dụng rất nhiều, nhưng cách này "hằng số" được gắn liền với nguồn gốc của chúng. – Casper

+0

@Casper Có lẽ ý tưởng tốt hơn nữa, đúng vậy. –

9

Chúng không phải là cấu trúc tương đương. Tùy thuộc vào ứng dụng của bạn, chúng có thể hoặc không thể hoán đổi cho nhau, nhưng chúng khác nhau về mặt ngữ nghĩa.

# 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 để biết thêm thông tin - điểm tốt. –

36

Bạn có thể muốn sử dụng thông tin Redis.current More here

Ví dụ, trong một initializer:

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

Và sau đó trong các lớp học khác của bạn:

def stars 
    redis.smembers("stars") 
end 

private 

def redis 
    Redis.current 
end 
+0

Giải pháp tuyệt vời cho 'Không giới thiệu các biến toàn cục'. lỗi bằng đá quý rubocop. – leo

Các vấn đề liên quan