(นี่เป็นความคิดเห็นเพิ่มเติมสำหรับคำตอบของ Daniel แต่ฉันโพสต์ไว้เป็นคำตอบเพื่อประโยชน์ของการเน้นและการจัดรูปแบบไวยากรณ์)
ประเด็นของ Daniel เกี่ยวกับรูปแบบการใช้อักษรตัวใหญ่เริ่มต้นที่มีความสำคัญในความหมายของภาษานั้นละเอียดอ่อนและสำคัญกว่าที่ฉันให้เครดิตไว้ตอนแรกที่ฉันเรียน 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!")