2009-10-26 19 views
25

इस प्रकार मैं एक टपल असाइन कर सकते हैं:टपल पैरामीटर घोषणा और काम विषमता

var (min, max) = (1, 2) 

लेकिन मैं तो नहीं इस प्रकार

(min, max) = (1, 3) //compiler error: ';' expected but '=' found 

इसके बजाय मुझे क्या करना है लगता है फिर से असाइन कर सकते हैं:

min = 1 
max = 3 

बाद का काम क्यों करता है जबकि पूर्व नहीं करता है?

उत्तर

26

अच्छा, क्योंकि यह उस तरह से कल्पना की गई थी, मुझे लगता है।

यह, टुपल असाइनमेंट, पैटर्न मिलान का एक उदाहरण है।

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 को पहले परिभाषित नहीं किया था।

अब, क्या आप क्या करना चाहते पिछले मान ओवरराइट, बजाय नया पहचानकर्ता के लिए नया मान निर्दिष्ट है। ऐसा नहीं है कि कैसे पैटर्न मिलान काम करता है, जिसका अर्थ यह है कि यह एक पूरी तरह से नया नियम होगा। चूंकि स्कैला धीरे-धीरे अपरिवर्तनीयता की ओर लोगों को उकसाता है, मुझे लगता है कि यह अनुचित नहीं है कि उन्होंने इसे संभालने के लिए एक नया नियम नहीं बनाया है।

+1

टिकट https://issues.scala-lang.org/browse/SI-1324 है ("इसे एक एसआईपी की आवश्यकता होगी") –

संबंधित मुद्दे