2011-11-27 13 views
30

मैं स्कैला के लिए बिल्कुल नया हूं और संग्रह पदानुक्रम को समझने की कोशिश कर रहा हूं। मैं देखता हूं कि 'म्यूटेबल' और 'अपरिवर्तनीय' संग्रहों के बीच एक अंतर है, लेकिन मुझे समझ में नहीं आता कि वास्तव में कार्यान्वयन स्तर पर इसका क्या अर्थ है और यह val और var से कैसे संबंधित है। क्या कोई मुझे इस पर कुछ अंतर्दृष्टि दे सकता है? साथ ही, क्या प्रत्येक संग्रह वर्ग में 'म्यूटेबल' संस्करण और 'अपरिवर्तनीय' संस्करण होता है, या क्या कुछ कक्षाएं हैं जो केवल 'उत्परिवर्तनीय' या 'अपरिवर्तनीय' हो सकती हैं?स्केल संग्रह में उत्परिवर्तनीय बनाम अपरिवर्तनीय

उत्तर

50

उत्परिवर्तन का अर्थ है कि आप संग्रह को स्थानांतरित कर सकते हैं। इसलिए, यदि आपके पास c संग्रह है और आप += के साथ एक तत्व जोड़ते हैं, तो c बदल गया है, और इस संग्रह के हर दूसरे संदर्भ में भी है।

अपरिवर्तनीय अर्थ है कि संग्रह वस्तु कभी नहीं बदली जाती है; इसके बजाय, आप + या ++ जैसे संचालन के साथ नई संग्रह ऑब्जेक्ट्स बनाते हैं, जो एक नया संग्रह लौटाता है। यह समवर्ती एल्गोरिदम में उपयोगी है, क्योंकि इसे संग्रह में कुछ जोड़ने के लिए लॉकिंग की आवश्यकता नहीं है। यह कुछ ओवरहेड की कीमत पर आ सकता है, लेकिन यह संपत्ति बहुत उपयोगी हो सकती है। स्कैला के अपरिवर्तनीय संग्रह fully persistent data structures हैं।

अंतर बहुत कि var और val के बीच करने के लिए समान है, लेकिन ध्यान रखें कि आप:

  1. आप एक परिवर्तनशील संग्रह में जगह एक val करने के लिए बाध्य संशोधित कर सकते हैं, हालांकि आप val
  2. पुन: असाइन नहीं कर सकते
  3. आप एक अपरिवर्तनीय संग्रह को स्थानांतरित नहीं कर सकते हैं, लेकिन यदि इसे var पर असाइन किया गया है, तो आप उस को + जैसे ऑपरेशन द्वारा बनाए गए संग्रह में पुन: असाइन कर सकते हैं।

सभी संग्रह आवश्यक रूप से उत्परिवर्तनीय और अपरिवर्तनीय रूपों में मौजूद नहीं हैं; आखिरी बार मैंने चेक किया, केवल परिवर्तनीय प्राथमिकता कतार समर्थित थीं।

+0

धन्यवाद, यह समझ में आता है! – astay13

+4

उत्परिवर्तनीय बनाम अपरिवर्तनीय का उत्कृष्ट सारांश। अच्छा काम। – Clive

+0

'var a = 0' में, यदि दो धागे समवर्ती रूप से' ए = 1' और 'ए = 2' करने की कोशिश करते हैं, तो यह कैसे संभाला जाता है? क्या इसे लॉकिंग की आवश्यकता नहीं है? – Jus12

6

अपरिवर्तनीय साधन अपरिवर्तनीय है। val एक संदर्भ अपरिवर्तनीय बनाता है, जिसका अर्थ यह है कि आप इसे शुरू होने के बाद val पर मान निर्दिष्ट नहीं कर सकते हैं। अपरिवर्तनीय संग्रह संग्रह को अपरिवर्तनीय बनाते हैं, इसका संदर्भ नहीं। प्रत्येक बार जब आप एक अपरिवर्तनीय संग्रह को संशोधित करते हैं, तो मूल संग्रह को स्थानांतरित करने के बजाय एक और संग्रह उत्पन्न होता है। अधिकांश संग्रहों में अपरिवर्तनीय और परिवर्तनीय दोनों संस्करण होते हैं, लेकिन पाठ्यक्रम के अपवाद भी हैं।

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