में हुक कैसे करें मेरे पास एक ऐसी स्थिति है जहां मैं एक क्लोजर नेमस्पेस में ऑब्जेक्ट्स बना रहा हूं और नष्ट कर रहा हूं, और एक अन्य नेमस्पेस को समन्वयित करना चाहता हूं। हालांकि मैं नहीं चाहता कि पहले नामस्थान को ऑब्जेक्ट विनाश पर दूसरी बार स्पष्ट रूप से कॉल करना पड़े।क्लोजर
जावा में, मैं श्रोता का उपयोग कर सकता था। दुर्भाग्य से अंतर्निहित जावा पुस्तकालय वस्तु विनाश पर घटनाओं को संकेत नहीं देते हैं। अगर मैं इमाक्स-लिस्प में था, तो मैं चाल का उपयोग करता हूं जो चाल करता है।
अब, क्लोजर में मुझे इतना यकीन नहीं है। मुझे रॉबर्ट हुक लाइब्रेरी https://github.com/technomancy/robert-hooke मिली है। लेकिन यह elisp शर्तों में defadvice की तरह है - मैं कार्यों को लिख रहा हूँ। दस्तावेज़ीकरण पर अधिक कहते हैं:
"हुक उन कार्यों को बढ़ाने के लिए हैं जिनका आप नियंत्रण नहीं करते हैं; यदि आपके पास लक्ष्य कार्य है तो इसके व्यवहार को बदलने के लिए स्पष्ट रूप से बेहतर तरीके हैं।"
अफसोस की बात है, मुझे यह इतना स्पष्ट नहीं मिल रहा है।
एक और संभावना एड-घड़ी का उपयोग करना होगा, लेकिन इसे अल्फा के रूप में चिह्नित किया गया है।
क्या मुझे एक और स्पष्ट समाधान याद आ रहा है?
उदाहरण जोड़ा गया:
तो सबसे पहले नाम स्थान ....
(ns scratch-clj.first
(:require [scratch-clj.another]))
(def listf (ref()))
(defn add-object []
(dosync
(ref-set listf (conj
@listf (Object.))))
(println listf))
(defn remove-object []
(scratch-clj.another/do-something-useful (first @listf))
(dosync
(ref-set listf (rest @listf)))
(println listf))
(add-object)
(remove-object)
दूसरा नाम स्थान
(ns scratch-clj.another)
(defn do-something-useful [object]
(println "object removed is:" object))
समस्या है कि यहाँ खरोंच clj.first है एक और और स्पष्ट रूप से की आवश्यकता के लिए है पुश हटाने घटनाओं भर में। यह थोड़ा उलझन में है, लेकिन अगर मैं "अभी तक एक और" नामस्थान था, तो यह भी काम नहीं करता है, जो भी सुनना चाहता था।
इसलिए मैंने पहले समारोह को जोड़ने का विचार किया।
हम्म के लिए धन्यवाद, शब्द "विनाश" के बारे में सावधान रहना होगा। मेरा मानना है कि ऑब्जेक्ट विनाश केवल तब होता है जब जीसी साफ हो जाता है। वस्तुओं को नष्ट करने के लिए वस्तुओं को हटाने के लिए अलग है, हालांकि कोई दूसरा कारण बन सकता है। –