(Đây là một nhận xét bổ sung cho câu trả lời của Daniel, nhưng tôi đăng nó như một câu trả lời vì lợi ích của việc đánh dấu cú pháp và định dạng.)
Quan điểm của Daniel về phong cách sử dụng một chữ cái viết hoa đầu tiên là quan trọng trong ngữ nghĩa ngôn ngữ là tinh tế và quan trọng hơn so với ban đầu tôi đã ghi công khi học Scala.
Hãy xem xét đoạn mã sau:
object Case {
val lowerConst = "lower"
val UpperConst = "UPPER"
def main(args: Array[String]) {
for (i <- Seq(lowerConst, UpperConst, "should mismatch.").map(Option.apply)) {
print("Input '%s' results in: ".format(i))
i match {
case Some(UpperConst) => println("UPPER!!!")
case Some(lowerConst) => println("lower!")
case _ => println("mismatch!")
}
}
}
}
Ngây thơ, tôi đã mong đợi điều đó sẽ đạt được tất cả các trường hợp trong trận đấu. Thay vào đó, nó in:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Điều đang xảy ra là làm case Some(lowerConst)
đổ bóng val lowerConst
và tạo ra một biến cục bộ có cùng tên sẽ được điền vào bất kỳ khi nào Some
một chuỗi có chứa được đánh giá.
Phải thừa nhận là có nhiều cách để giải quyết vấn đề đó, nhưng đơn giản nhất là làm theo hướng dẫn về kiểu để đặt tên liên tục.
Nếu bạn không thể tuân theo quy ước đặt tên, thì như @reggoodwin chỉ ra trong phần nhận xét bên dưới, bạn có thể đặt tên biến trong dấu tích, như vậy
case Some(`lowerConst`) => println("lower!")