(Il s'agit d'un commentaire complémentaire à la réponse de Daniel, mais je le publie en tant que réponse pour bénéficier de la coloration syntaxique et du formatage).
La remarque de Daniel concernant l'importance du style d'utilisation de la majuscule initiale dans la sémantique du langage est plus subtile et plus importante que ce que je lui ai accordé à l'origine lorsque j'ai appris Scala.
Considérons le code suivant :
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!")
}
}
}
}
Naïvement, je me serais attendu à ce que cela concerne tous les cas du match. Au lieu de cela, il imprime :
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Ce qui se passe, c'est que le case Some(lowerConst)
ombres le val lowerConst
et crée une variable locale du même nom qui sera remplie à chaque fois qu'un fichier Some
contenant une chaîne de caractères est évaluée.
Il existe certes des moyens de contourner ce problème, mais le plus simple est de suivre le guide de style pour l'attribution de noms constants.
Si vous ne pouvez pas respecter la convention d'appellation, vous pouvez, comme le souligne @reggoodwin dans les commentaires ci-dessous, mettre le nom de la variable entre crochets, comme suit
case Some(`lowerConst`) => println("lower!")