2013-11-22 4 views
5

मेरी समस्या यह है कि प्रदान किए गए दस्तावेज़ और उदाहरणों के साथ मैं :key पैरामीटर या इसके संभावित मानों के अर्थ को समझ नहीं सकता यह फ़ंक्शन का आधिकारिक दस्तावेज़ पृष्ठ है मैं बात कर रहा हूँ:
http://clojuredocs.org/clojure_core/clojure.core/add-watchइसका क्या अर्थ है: ऐड-घड़ी फ़ंक्शन में कुंजी पैरामीटर

ऐड-घड़ी clojure.core

(add-watch reference key fn) 

एक एजेंट/एटम/var/फिर से करने के लिए एक घड़ी समारोह जोड़ता है एफ संदर्भ। घड़ी एफएन 4 तर्कों का एक एफएन होना चाहिए: एक कुंजी, संदर्भ, इसका पुराना राज्य, इसका नया-राज्य। जब भी संदर्भ का राज्य बदल दिया गया हो, तो पंजीकृत घड़ियों में उनके कार्य होंगे। घड़ी एफएन को एजेंट के धागे पर सिंक्रनाइज़ कहा जाएगा, यदि कोई एजेंट, लंबित है तो एजेंट या रेफरी भेजता है। ध्यान दें कि एक परमाणु या रेफ की स्थिति एफएन कॉल से पहले फिर से बदल गई है, इसलिए संदर्भ को खराब करने के बजाय पुराने/नए-राज्य के बजाय का उपयोग करें। ध्यान दें कि एफएनएस को कई धागे से कहा जा सकता है। रूट वॉचर्स केवल रूट बाध्यकारी परिवर्तनों से ट्रिगर होते हैं, थ्रेड-स्थानीय सेट नहीं। कुंजी प्रति संदर्भ होना चाहिए, और इसे हटाने-घड़ी, के साथ घड़ी को हटाने के लिए उपयोग किया जा सकता है लेकिन अन्यथा घड़ी तंत्र द्वारा अपारदर्शी माना जाता है।

धन्यवाद

उत्तर

9

यह मूल रूप से केवल एक पहचानकर्ता है जिसे आप घड़ी की पहचान करने के लिए कोड कॉल करने में उपयोग कर सकते हैं, यदि आपके पास प्रति संदर्भ एक से अधिक घड़ियों हैं। यह ऐसा कुछ है जो आपके आवेदन कोड के लिए महत्वपूर्ण होना चाहिए, लेकिन क्लोजर द्वारा पारित किया जाएगा।

उदाहरण के लिए:

user> (def a (atom 0)) 
#'user/a 
user> (add-watch a 
       :count-to-3 
       (fn [k r old-state new-state] 
        (println "changed from" old-state "to" new-state) 
        (when (>= new-state 3) 
         (remove-watch a :count-to-3)))) 
#<[email protected]: 0> 
user> (dotimes [_ 5] (swap! a inc)) 
changed from 0 to 1 
changed from 1 to 2 
changed from 2 to 3 
nil 
user> @a 
5 
+0

क्या 'गुमनाम समारोह में लिए खड़े r' करता है? – qed

+0

'r' वह चीज है जिसे आप देख रहे हैं, इस मामले में परमाणु' ए'। यदि आपने इसे संदर्भित किया है तो यह 'नया राज्य' जैसा ही होगा। – Kris

8

जवाब के वहीं:

कुंजी संदर्भ प्रति अनन्य होना चाहिए, और निकालें-घड़ी के साथ घड़ी दूर करने के लिए इस्तेमाल किया जा सकता, लेकिन अन्यथा द्वारा अपारदर्शी माना जाता है घड़ी तंत्र।

दूसरे शब्दों में, वास्तविक घड़ी तंत्र की परवाह नहीं करता कि तुम क्या करने के लिए कुंजी सेट (जब तक यह संचालकों दिया रेफरी पर सेट के बीच में अद्वितीय है के रूप में), लेकिन आप इसे करने के लिए पर लटका करने की आवश्यकता होगी यदि आप कभी भी अपने हैंडलर से छुटकारा पाने के लिए remove-watch पर कॉल करना चाहते हैं

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