मैं गतिशील चर और बाध्यकारी समारोह समझने की कोशिश की तो मैं यह करने की कोशिश की (clojure 1.3):clojure और ^: गतिशील
user=> (defn f []
(def ^:dynamic x 5)
(defn g [] (println x))
(defn h [] (binding [x 3] (g)))
(h))
#'user/f
user=> (f)
5
nil
उलझन में, मैं यह कुछ हद तक सरल कोड की कोशिश की:
user=> (def ^:dynamic y 5)
#'user/y
user=> (defn g [] (println y))
#'user/g
user=> (defn h [] (binding [y 3] (g)))
#'user/h
user=> (h)
3
nil
क्या कोड के दो टुकड़ों के बीच अंतर है? दूसरा उदाहरण क्यों काम करता है लेकिन पहला नहीं है?
सुझाव: मैं सिर्फ महसूस किया कि निम्न काम करता है (अब भी है पूरी तरह से क्यों समझ में नहीं आता):
user=> (def ^:dynamic y 5)
#'user/y
user=> (defn f [] (defn g [] (println y)) (defn h [] (binding [y 3] (g))) (h))
#'user/f
user=> (f)
3
nil
user=>
मैं बाइंडिंग के पेशेवर/विपक्ष को समझता हूं। मुझे यह भी पता है कि पहला कोड उदाहरण असामान्य क्लोजर कोड है। मुझे समझ में नहीं आया कि यह क्यों काम नहीं करता (1.3, ताजा प्रतिलिपि के साथ)। – Kevin
मुझे परेशानी हो रही है जब आप कभी बाध्यकारी चाहते हैं! यह कार्यात्मक तरीके से अनाथाश्रम दिखता है। मैं क्या खो रहा हूँ ? – Hendekagon
@ हेंडेकैगन - शायद अपने स्वयं के अधिकार में एक SO प्रश्न का हकदार है। लेकिन मुझे आरईपीएल में डिबगिंग/काम करते समय गोल संदर्भ पारित करने के एक अतिरिक्त तरीके के रूप में उपयोगी पाया गया है - यदि आपने इसे पूरी तरह से कार्यात्मक तरीके से किया है तो आपको एक (संभावित रूप से बहुत लंबी) कॉल के माध्यम से सभी तरह से नए पैरामीटर थ्रेड करना होगा ग्राफ। – mikera