(Ini adalah komentar tambahan untuk jawaban Daniel, tapi saya mempostingnya sebagai jawaban untuk kepentingan penyorotan dan pemformatan sintaks.)
Poin Daniel tentang gaya menggunakan huruf kapital awal yang penting dalam semantik bahasa lebih halus dan penting daripada yang semula saya berikan ketika saya belajar Scala.
Perhatikan kode berikut:
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!")
}
}
}
}
Secara naif, saya mengharapkan itu untuk mencapai semua kasus dalam pertandingan. Sebagai gantinya mencetak:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Apa yang terjadi adalah case Some(lowerConst)
bayangan val lowerConst
dan membuat variabel lokal dengan nama yang sama yang akan diisi setiap kali Some
string yang mengandung dievaluasi.
Memang ada cara untuk mengatasinya, tetapi yang paling sederhana adalah mengikuti panduan gaya untuk penamaan yang konstan.
Jika Anda tidak dapat mengikuti konvensi penamaan, seperti yang ditunjukkan @reggoodwin pada komentar di bawah, Anda dapat meletakkan nama variabel di tanda centang, seperti itu
case Some(`lowerConst`) => println("lower!")