(To jest komentarz w dodatku do odpowiedzi Daniela, ale zamieszczam go jako odpowiedź na korzyść podświetlania i formatowania składni).
Uwaga Daniela dotycząca stylu używania dużej litery jako ważnej w semantyce języka jest bardziej subtelna i ważniejsza, niż początkowo przypisywałem jej, kiedy uczyłem się Scali.
Rozważ następujący kod:
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!")
}
}
}
}
Naiwnie spodziewałbym się, że dotrze to do wszystkich przypadków w meczu. Zamiast tego drukuje:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Chodzi o to, że przesłaniają wartość case Some(lowerConst)
val lowerConst
i tworzą lokalną zmienną o tej samej nazwie, która zostanie zapełniona za każdym razem, gdy Some
oceniany jest łańcuch zawierający ciąg.
Wprawdzie istnieją sposoby na obejście tego problemu, ale najprościej jest postępować zgodnie z przewodnikiem po stylu dotyczącym ciągłego nazywania.
Jeśli nie możesz przestrzegać konwencji nazewnictwa, to jak @reggoodwin wskazuje w komentarzach poniżej, możesz umieścić nazwę zmiennej w znacznikach
case Some(`lowerConst`) => println("lower!")