निम्न फ़ंक्शन लें:स्कैला में पैटर्न मिलान क्यों चर के साथ काम नहीं करता है?
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")
मुझे लगता है कि ऐसा इसलिए है क्योंकि ऐसा लगता है कि लक्ष्य वास्तव में एक ऐसा नाम है जिसे आप इनपुट के लिए असाइन करना चाहते हैं। दो प्रश्न:
यह व्यवहार क्यों? क्या मामला केवल उस प्रकार के मौजूदा चर के लिए नहीं दिख सकता है जिसमें उपयुक्त प्रकार है और पहले उन का उपयोग करें और यदि कोई नहीं मिला है, तो लक्ष्य को पैटर्न के रूप में पैटर्न के रूप में देखें?
क्या इसके लिए कोई कामकाज है? चर के खिलाफ पैटर्न मिलान करने के लिए कोई रास्ता? आखिरकार कोई कथन के मामले में बड़ा इस्तेमाल कर सकता है, लेकिन मैच केस अधिक सुरुचिपूर्ण है।
संबंधित: http://stackoverflow.com/questions/7083502/why-cant-a-variable-be-a-stable-identifier –
मुझे विश्वास है कि यह प्रश्न, कोड और उत्तर स्कैला 2.12.x के रूप में पुराना है। यह अच्छा होगा अगर संस्करण लागू होता है तो प्रश्न के हिस्से के रूप में उल्लेख किया गया था। – conny