एकीकृत अद्यतन मॉडल एपीआई सम्मेलन जिससे विभिन्न संदर्भ प्रकार की वस्तुओं के लिए एक सुसंगत तरीके से अद्यतन किया जा सकता, विशेष कार्यों के साथ यद्यपि है:
;; Atoms
(swap! the-atom f …)
;; Agents
(send the-agent f …)
(send-off the-agent f …)
;; send-via takes an additional initial argument, but otherwise
;; follows the same convention (and of course it's an exact match
;; when partially applied – (partial send-via some-executor))
(send-via executor the-agent f …)
;; Refs
(dosync
(alter the-ref f …)
(commute the-ref f…))
प्रत्येक मामले f
में समारोह है कि ऐसा करना चाहिए है एटम/एजेंट/रेफ, …
द्वारा रखे गए मान को अपडेट करने के लिए इस्तेमाल किया जाना चाहिए, यदि कोई है (उदाहरण के लिए (swap! the-atom f 1 2 3)
), और कॉल का नतीजा यह है कि संदर्भ परमाणु मूल्य (f old-value …)
मान लेगा - हालांकि वास्तव में जब ऐसा होगाके संबंध में/alter
/send
/... कॉल संदर्भ प्रकार और उपयोग किए गए अद्यतन फ़ंक्शन पर निर्भर करता है।
यहाँ एक उदाहरण है:
(def a (atom 0))
(swap! a - 5)
@a
;= -5
Vars आम तौर पर इसी उद्देश्य से एक के लिए उपर्युक्त संदर्भ प्रकार का उपयोग हो सकता है कि के लिए इस्तेमाल किया जा नहीं होती हैं, लेकिन वे भी एक ही अनुबंध के साथ एक अद्यतन कार्य हो :
(alter-var-root #'the-var f …)
अंत में, update
और update-in
कार्यों इस संबंध में उल्लेख के लायक हैं; प्रभाव में, वे मूल्यों को एकीकृत अद्यतन मॉडल सम्मेलन का विस्तार - अब जाहिर है, मूल्यों, अपरिवर्तनीय हैं, इसलिए बुला update
या update-in
किसी भी वस्तु दिख जा रहा है बदल में परिणाम नहीं करता है, लेकिन वापसी मान परिणाम के रूप में इसी तरह का उत्पादन किया है
(update {:foo 1} :foo inc)
;= {:foo 2}
fixing
समारोह सवाल में उद्धृत fix
UUM अद्यतन कॉल के संदर्भ में (एक ही नाम स्थान में परिभाषित) की तुलना में बेहतर काम करता है, क्योंकि यह: कुछ अतिरिक्त तर्क एक पहले से मौजूद मूल्य और संभवतः के लिए एक अद्यतन समारोह को लागू करने की कई तर्कों को इस तरीके से पारित किया जा सकता है कि यूयूएम अपडेट कैसे कार्य करता है के swap!
काम, जबकि fix
के साथ आपको एक अनाम कार्य का उपयोग करना होगा:
;; the example from the docstring of fixing
(swap! my-atom fixing map? update-in [k] inc)
;; modified to use fix
(swap! my-atom fix map? #(update-in % [k] inc))