के साथ मिलान स्केल पैटर्न मिलान मैंने पाया कि विकल्प (स्ट्रिंग्स के लिए) के साथ मिलान पैटर्न का उपयोग करते समय, स्कैला ऊपरी मामले (नीचे दिए गए उदाहरण में, MyValue1
और MyValue2
) से शुरू होने वाले चर स्वीकार करता है, लेकिन कम मामले से शुरू नहीं होने वाले (myValue1
, myValue2
)। क्या यह एक बग या स्कैला की एक विशेषता है? मुझे यह संस्करण 2.8 में मिलता है। यदि यह एक विशेषता है, तो क्या कोई इसके पीछे तर्क को समझा सकता है?लोअरकेस वैरिएबल नाम
val myValue1 = "hello"
val myValue2 = "world"
val MyValue1 = "hello"
val MyValue2 = "world"
var x:String = "test"
x match {
case MyValue1 | MyValue2 => println ("first match")
case myValue1 | myValue2 => println ("second match")
}
चल, मैं निम्नलिखित मिल:
scala> val myValue1 = "hello"
myValue1: java.lang.String = hello
scala> val myValue2 = "world"
myValue2: java.lang.String = world
scala> val MyValue1 = "hello"
MyValue1: java.lang.String = hello
scala> val MyValue2 = "world"
MyValue2: java.lang.String = world
scala> var x:String = "test"
x: String = test
scala> x match {
| case MyValue1 | MyValue2 => println ("first match")
| case myValue1 | myValue2 => println ("second match")
| }
<console>:11: error: illegal variable in pattern alternative
case myValue1 | myValue2 => println ("second match")
^
<console>:11: error: illegal variable in pattern alternative
case myValue1 | myValue2 => println ("second match")
^
संपादित: यह कोड मैं प्रयोग किया जाता है
तो यह वास्तव में एक सुविधा और नहीं एक बग है ... क्या कोई उपयोगी हो सकता है जब यह उपयोगी हो सकता है?
जब मैं का उपयोग करें:
x match {
case myValue1 => println ("match")
case _ =>
}
मैं पिछले मामले पर एक unreachable code
चेतावनी मिलती है, जिसका अर्थ है कि पहले एक हमेशा मेल खाता है।
यह स्काला में आम प्रोग्रामिंग गलतियों में से एक है: http://stackoverflow.com/questions/1332574/common- प्रोग्रामिंग-गलतियों के लिए स्केला-डेवलपर्स करने वाली बचने/2489355 # 2489355। मैं पूरी तरह से उस धागे को पढ़ने की सलाह देता हूं - इसे इस तरह के अन्य गॉथस का गुच्छा मिला है। – Steve
महान संदर्भ के लिए धन्यवाद। – Jus12
एक उपयोगी उदाहरण: 'एक्स मैच {केस myValue1: स्ट्रिंग => println (" मैच: "+ myValue1); मामला _ =>} '-> myValue1 एक स्थानीय चर बन जाता है। – Madoc