(Questo è un commento aggiuntivo alla risposta di Daniel, ma lo sto pubblicando come risposta a vantaggio dell'evidenziazione e della formattazione della sintassi.)
Il punto di vista di Daniel sullo stile di usare una lettera maiuscola iniziale che è importante nella semantica del linguaggio è più sottile e importante di quanto inizialmente gli ho dato credito quando ho imparato Scala.
Considera il codice seguente:
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!")
}
}
}
}
Ingenuamente mi sarei aspettato che arrivasse a tutti i casi della partita. Invece stampa:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Quello che sta succedendo è che case Some(lowerConst)ombreggia il val lowerConste crea una variabile locale con lo stesso nome che verrà popolata ogni volta Someche viene valutato un contenente una stringa.
Ci sono certamente modi per aggirare il problema, ma il più semplice è seguire la guida allo stile per la denominazione costante.
Se non puoi seguire la convenzione di denominazione, come sottolinea @reggoodwin nei commenti qui sotto, puoi inserire il nome della variabile in segni di spunta, in questo modo
case Some(`lowerConst`) => println("lower!")