ใช้ฟังก์ชันต่อไปนี้:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
รูปแบบนี้เข้ากันได้ดี:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
สิ่งที่ฉันอยากจะทำได้มีดังต่อไปนี้:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
สิ่งนี้ทำให้เกิดข้อผิดพลาดต่อไปนี้:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
ฉันเดาว่านี่เป็นเพราะมันคิดว่าเป้าหมายนั้นเป็นชื่อที่คุณต้องการกำหนดให้กับสิ่งที่ป้อนเข้า สองคำถาม:
ทำไมพฤติกรรมนี้ ไม่สามารถกรณีเพียงแค่มองหาตัวแปรที่มีอยู่ในขอบเขตที่มีประเภทที่เหมาะสมและใช้สิ่งเหล่านั้นก่อนและหากไม่พบให้ถือว่าเป้าหมายเป็นชื่อเพื่อจับคู่รูปแบบ?
มีวิธีแก้ปัญหานี้หรือไม่? วิธีใดในการจับคู่รูปแบบกับตัวแปร? ท้ายที่สุดแล้วเราสามารถใช้คำสั่ง big if ได้ แต่ตัวพิมพ์ใหญ่จะดูหรูหรา