अच्छा, क्योंकि यह उस तरह से कल्पना की गई थी, मुझे लगता है।
यह, टुपल असाइनमेंट, पैटर्न मिलान का एक उदाहरण है।
var PATTERN = ... // or val
for (PATTERN <- ...) ...
case PATTERN => ...
तो इन सभी मामलों काम: पैटर्न मिलान तीन स्थानों है कि मैं की याद में होता है
val l = List((1,'a'), (2,'b'), (3,'c'))
var (n, c) = l(0)
for ((n, c) <- l) println(n+": "+c)
l(1) match {
case (n, c) => println(n+": "+c)
}
अब, पिछले उदाहरण के लिए, एक case
का उपयोग कर लेते हैं। नोट n
और c
कि उदाहरण में नहीं हैं कि एक ही n
और c
थोड़ा पहले परिभाषित किया। पैटर्न मैच नई पहचानकर्ता n
और c
, जो case
बयान के escope के लिए पिछले वर्णन से शैडो होगा करने के लिए मूल्यों को आवंटित करेगा। for
उदाहरण पर भी यही बात हुई, जिसने n
और c
को पहले परिभाषित नहीं किया था।
अब, क्या आप क्या करना चाहते पिछले मान ओवरराइट, बजाय नया पहचानकर्ता के लिए नया मान निर्दिष्ट है। ऐसा नहीं है कि कैसे पैटर्न मिलान काम करता है, जिसका अर्थ यह है कि यह एक पूरी तरह से नया नियम होगा। चूंकि स्कैला धीरे-धीरे अपरिवर्तनीयता की ओर लोगों को उकसाता है, मुझे लगता है कि यह अनुचित नहीं है कि उन्होंने इसे संभालने के लिए एक नया नियम नहीं बनाया है।
स्रोत
2009-10-26 15:59:50
टिकट https://issues.scala-lang.org/browse/SI-1324 है ("इसे एक एसआईपी की आवश्यकता होगी") –