2008-12-22 45 views
43

Tôi đã lập trình Ruby trong một vài tháng và tôi tự hỏi khi nào nó thích hợp để sử dụng hằng số trên các biến lớp và ngược lại. (Tôi đang làm việc trong Rails, suy nghĩ về hằng số trong các mô hình).Hằng số hoặc biến lớp trong ruby?

class Category 
    TYPES = %w(listing event business).freeze 
end 

HOẶC

class Category 
    @@types = %w(listing event business).freeze 
    cattr_reader :types 
end 

Có trường hợp một là một lợi thế khác? Hay nó chỉ là vấn đề về hương vị/phong cách?

Trả lời

54

Điều chính là bằng cách sử dụng ký hiệu CONSTANT, bạn đang làm cho nó rõ ràng với người đọc. trường hợp thấp hơn, chuỗi cố định cho hiển thị là có thể được đặt là, buộc người nào đó quay lại và đọc RDoc.

+5

1 - và suy nghĩ của biến nghèo mà không được thực hiện đầy đủ desiny của nó (nó không bao giờ thay đổi)! Liên quan đến nhận xét RDoc, lưu ý rằng các hằng số được ghi nhận theo mặc định – Gareth

+3

Biến không được quan tâm kém. –

10

Nếu đây là những giá trị thực sự không đổi mà bạn xác định trong mã nguồn và không muốn thay đổi trong quá trình thực thi mã thì tôi khuyên bạn nên sử dụng hằng số.

Nếu bạn có kế hoạch đặt và/hoặc thay đổi các giá trị này theo cách động trong khi thực thi thì hãy sử dụng biến lớp với getters và setters.

8

Về cơ bản, bạn có thể đặt nó như sau: Nếu bạn muốn thứ gì đó không đổi, hãy sử dụng hằng số. Nếu bạn muốn một cái gì đó đó là biến, sử dụng một biến. Có vẻ như danh sách các kiểu của bạn là hằng số, nhìn thấy nó là một mảng bị đóng băng, vì vậy tôi sẽ nói nó có ý nghĩa khi sử dụng một hằng số trong trường hợp này.

1

Nếu bạn không muốn giá trị thay đổi trong suốt thời gian chạy chương trình, bạn cảm thấy thoải mái khi cho phép truy cập giá trị bên ngoài lớp học của mình, sử dụng hằng số.

Nếu không, bạn có thể sử dụng biến lớp. Tuy nhiên, lưu ý rằng các biến lớp được chia sẻ giữa các lớp con và các thể hiện của các lớp con. Vì vậy, nếu bạn có thể tại một số điểm trong tương lai thực hiện một lớp con, bạn phải rất cẩn thận về việc bạn sử dụng các biến lớp.

Tham khảo các câu trả lời ở đây để biết thêm về vấn đề này: Class variables in Ruby

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