निम्नलिखित कार्य करें:
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")
मुझे लगता है कि ऐसा इसलिए है क्योंकि यह सोचता है कि लक्ष्य वास्तव में एक ऐसा नाम है जिसे आप इनपुट करना चाहते हैं। दो सवाल:
यह व्यवहार क्यों? क्या मामला केवल मौजूदा वैरिएबल के दायरे में नहीं दिख सकता है, जिनके पास उपयुक्त प्रकार है और जो पहले उपयोग करते हैं और यदि कोई नहीं पाया जाता है, तो लक्ष्य को एक नाम के रूप में समझें?
क्या इसके आसपास कोई कार्य है? वेरिएबल्स के खिलाफ मैच करने का कोई तरीका? अंतत: अगर कोई बयान का उपयोग कर सकता है, लेकिन मैच का मामला अधिक सुरुचिपूर्ण है।