(This is an addendum comment to Daniel's answer, but I'm posting it as an answer for the benefit of syntax highlighting and formatting.)
Daniel's point about the style of using an initial capital letter being important in the language semantics is more subtle and important than I originally gave it credit for when I learned Scala.
Consider the following code:
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!")
}
}
}
}
Naively I would have expected that to reach all of the cases in the match. Instead it prints:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
What's going on is that the case Some(lowerConst)
shadows the val lowerConst
and creates a local variable of the same name which will be populated any time a Some
containing a string is evaluated.
There are admittedly ways to work around it, but the simplest is to follow the style guide for constant naming.
If you can't follow the naming convention, then as @reggoodwin points out in the comments below, you can put the variable name in ticks, like so
case Some(`lowerConst`) => println("lower!")