मानक क्लोजर मानचित्र और सेट अपरिवर्तनीय (और लगातार) [1] हैं, इसलिए वे समवर्ती कार्यक्रमों में भी काम करते हैं। आप उन्हें अपनी आवश्यकताओं के आधार पर एक रेफरी/एजेंट/var/atom में स्टोर करना चाहते हैं, और आप अभी भी ref/agent/var/atom को हमेशा के रूप में अपडेट कर सकते हैं।
आप एक और अधिक परिवर्तनशील मानचित्र हो सकता है, अगर मान इस तरह, refs वास्तव में कर रहे हैं:
{:a (ref #{1 2 3})
:b (ref #{4 5 6})}
इस मामले में, आप वास्तव में मूल्यों पहले से ही विद्यमान की कुंजी (के लेन-देन में जोड़ने के लिए सक्षम हो जाएगा पाठ्यक्रम)। इसके अलावा और चाबी को हटाने अभी भी नए नक्शे वापस आ जाएगी, मूल नक्शे के रूप में ही refs साझा करेंगे जो है, और इसलिए उनमें से एक में परिवर्तन दूसरों को दिखाई हो जाएगा:
user=> (def mmap {:a (ref #{1 2 3}) :b (ref #{4 5 6})})
#'user/mmap
user=> mmap
{:a #<[email protected]: #{1 2 3}>, :b #<[email protected]: #{4 5 6}>}
user=> (def mmap2 (assoc mmap :c (ref #{7 8 9})))
#'user/mmap2
user=> mmap2
{:C#<[email protected]: #{7 8 9}>, :a #<[email protected]: #{1 2 3}>, :b #<[email protected]: #{4 5 6}>}
user=> mmap
{:a #<[email protected]: #{1 2 3}>, :b #<[email protected]: #{4 5 6}>}
user=> (dosync (alter (:a mmap2) conj 0))
#{0 1 2 3}
user=> mmap
{:a #<[email protected]: #{0 1 2 3}>, :b #<[email protected]: #{4 5 6}>}
user=> mmap2
{:C#<[email protected]: #{7 8 9}>, :a #<[email protected]: #{0 1 2 3}>, :b #<[email protected]: #{4 5 6}>}
[1] यही है, जोड़ने/कुंजी को हटाने/संशोधित करना, और मूल्य मूल रूप से मूल किए बिना, एक नया मानचित्र वापस कर देते हैं।
यह एक आम धारणा है कि हास्केल उत्परिवर्तन अनुमति नहीं देता है में स्काला में एक कार्यान्वयन है। ऐसा होता है। पकड़ यह है कि सभी उत्परिवर्तन प्रकारों में विधिवत ध्यान दिया जाना चाहिए; इसलिए म्यूटेशन इंटरफेस के साथ एक साथ उत्परिवर्तन संचालन लिखने का सामान्य तरीका है। हास्केलर स्काला और क्लोजर के समान ही व्यवहार्यता के लिए "वापस आ सकते हैं", हास्केल को छोड़कर आप धोखा नहीं दे सकते हैं और इसे एक समारोह की तरह दिखाना शुद्ध नहीं है जब यह नहीं है। हालांकि, अगर आप अपने फ़ंक्शन में उत्परिवर्तन को पूरी तरह से समाहित कर सकते हैं, तो यह अभी भी एक शुद्ध इंटरफ़ेस का पर्दाफाश कर सकता है। –