2012-06-25 31 views
5

Làm thế nào để bạn khai báo hằng số thời gian biên dịch trong Scala? Trong C# nếu bạn khai báoScala: Biên dịch các hằng số thời gian

const int myConst = 5 * 5; 

myConst được trong lót như đen 25. Là:

final val myConst = 5 * 5 

tương đương hoặc là có một số cơ chế/cú pháp khác?

Trả lời

8

Có, final val là cú pháp thích hợp, với Daniel's caveats. Tuy nhiên, trong phong cách Scala thích hợp, các hằng số của bạn phải là camelCase với một chữ cái đầu tiên.

Bắt đầu bằng chữ hoa là điều quan trọng nếu bạn muốn sử dụng hằng số của mình trong kết hợp mẫu. Chữ cái đầu tiên là cách trình biên dịch Scala phân biệt giữa các mẫu liên tục và các mẫu biến. Xem Phần 15.2 của Programming in Scala.

Nếu một val hoặc singleton đối tượng không bắt đầu bằng một chữ cái viết hoa, để sử dụng nó như là một mô hình phù hợp với bạn phải đặt nó bên trong backticks (``)

x match { 
    case Something => // tries to match against a value named Something 
    case `other` => // tries to match against a value named other 
    case other =>  // binds match value to a variable named other 
} 
5

final val là cách thực hiện. Trình biên dịch sau đó sẽ làm cho một hằng số biên dịch-thời gian nếu nó có thể.

Đọc nhận xét của Daniel bên dưới để biết chi tiết về ý nghĩa "nếu có thể".

+14

Bạn quên hai điểm quan trọng: nó phải là tĩnh giải quyết tại thời gian biên dịch - Tôi không chắc chắn Scala làm số học chữ tại thời gian biên dịch - và, rất dễ dàng để có được sai, _it không phải có một type_. Nếu bạn khai báo nó 'final val myConst: Int = 5', nó sẽ không được coi là hằng số. –

+1

Bạn có một tài liệu tham khảo liên quan đến _it không phải có một type_? –

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