(Це додатковий коментар до відповіді Даніеля, але я публікую його як відповідь задля висвітлення та форматування синтаксису.)
Подання Даніеля про те, як стиль використання початкової великої літери є важливим у мовній семантиці, є більш тонким і важливим, ніж я спочатку давав йому належне, коли вивчав Scala.
Розглянемо наступний код:
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!")
}
}
}
}
Наївно я очікував, що це охопить усі справи в матчі. Замість цього друкується:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Те, що відбувається, полягає в тому, що case Some(lowerConst)
тінь val lowerConst
створює і створює локальну змінну з тим самим іменем, яка буде заповнена кожного разу, коли Some
оцінюється рядок, що містить.
Є загальноприйняті способи обійти це, але найпростіший - це дотримуватися керівництва стилем для постійного іменування.
Якщо ви не можете дотримуватися правила іменування, тоді, як зазначає @reggoodwin у коментарях нижче, ви можете помістити ім'я змінної в галочки, наприклад так
case Some(`lowerConst`) => println("lower!")