(Este es un comentario anexo a la respuesta de Daniel, pero la he publicado como una respuesta para el beneficio de resaltado de sintaxis y el formato.)
El punto de Daniel sobre el estilo de utilizar una letra mayúscula inicial que es importante en la semántica del lenguaje es más sutil e importante de lo que originalmente le atribuí cuando aprendí Scala.
Considere el siguiente código:
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 lo que habría esperado que para llegar a todos los casos en el partido. En su lugar se imprime:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Lo que está pasando es que las sombras case Some(lowerConst)
Val lowerConst
y crea una variable local con el mismo nombre que se rellenará cualquier momento se evalúa un Some
que contiene una cadena.
Existen formas de evitarlo, pero lo más simple es seguir la guía de estilo para nombres constantes.
Si no puede seguir la convención de nombres, entonces como @reggoodwin señala en los comentarios a continuación, usted puede poner el nombre de la variable en las garrapatas, al igual que
case Some(`lowerConst`) => println("lower!")
Cuando es para ser utilizado como un, C-/constante de estilo Java convencional completamente-predefinido, la primera. La segunda forma (y los subrayados en los nombres en general) nunca se usa realmente. El tercero generalmente se usa para valores inmutables que se generan dinámicamente. – Destin
Estoy usando el segundo, pero sobre todo a la experiencia anterior de Java. Ignore eso, creo que la manera más oficial es la primera (ya que se usa en la propia escala de escalas, por ejemplo, mire π que se define como 'Pi '). –