मैं एक सार तत्व बनाना चाहता हूं जो डेटाबेस तालिका का प्रतिनिधित्व करता है, लेकिन जिसे सभी सामान्य क्लोजर सीक्यू और कॉंज और सभी फैंसी सामानों का उपयोग करके एक्सेस किया जा सकता है। क्या कोई प्रोटोकॉल जोड़ने की ज़रूरत है?क्लोजर में मैं अपने स्वयं के रिकॉर्ड और प्रकारों पर मानक क्लोजर संग्रह इंटरफेस कैसे कार्यान्वित कर सकता हूं?
18
A
उत्तर
15
हां। प्रोटोकॉल जावा इंटरफ़ेस clojure.lang.ISeq
द्वारा परिभाषित किया गया है। आप clojure.lang.ASeq
का विस्तार करना चाहते हैं जो इसके एक अमूर्त कार्यान्वयन प्रदान करता है।
यहां एक उदाहरण है: seq
एक संसाधन का अमूर्त जो बंद करने योग्य है और seq
समाप्त होने पर स्वचालित रूप से बंद हो जाता है। (कठोर परीक्षण नहीं किया गया)
(deftype CloseableSeq [delegate-seq close-fn]
clojure.lang.ISeq
(next [this]
(if-let [n (next delegate-seq)]
(CloseableSeq. n close-fn)
(.close this)))
(first [this] (if-let [f (first delegate-seq)] f (.close this)))
(more [this] (if-let [n (next this)] n '()))
(cons [this obj] (CloseableSeq. (cons obj delegate-seq) close-fn))
(count [this] (count delegate-seq))
(empty [this] (CloseableSeq. '() close-fn))
(equiv [this obj] (= delegate-seq obj))
clojure.lang.Seqable
(seq [this] this)
java.io.Closeable
(close [this] (close-fn)))
संबंधित मुद्दे
- 1. क्लोजर प्रोग्राम अपने स्वयं के MANIFEST.MF
- 2. मैं जावा से क्लोजर में कैसे संक्रमण कर सकता हूं?
- 3. क्या मैं क्लोजर प्रकारों में फ़ील्ड जोड़ सकता हूं?
- 4. मैं क्लोजर में मैक्रो कैसे मैप कर सकता हूं?
- 5. मैं क्लोजर के विशिष्ट का उपयोग कैसे कर सकता हूं? एक संग्रह पर काम?
- 6. मैं क्लोजर में वेक्टर आइटम कैसे अपडेट कर सकता हूं?
- 7. क्लोजर के लिए मानक?
- 8. क्लोजर बॉक्स (Emacs) में मूल्यांकन कैसे रद्द कर सकता हूं?
- 9. मैं क्लोजर स्रोत कोड को दोबारा कैसे कर सकता हूं?
- 10. मैं क्लोजर के मानक आउटपुट को कैप्चर कैसे कर सकता हूं?
- 11. क्लोजर में मैं जावा क्लास कैसे लगा सकता हूं?
- 12. क्लोजर में सार फ़ंक्शन या फ़ंक्शन इंटरफेस?
- 13. क्लोजर मानक मेटाडाटा विशेषताएँ
- 14. मैं क्लोजर को सैंडबॉक्स कैसे कर सकता हूं?
- 15. क्या मैं क्लोजर में एक निर्धारित शफल कर सकता हूं?
- 16. क्लोजर में सशर्त होने पर मैं रिकर कैसे कॉल कर सकता हूं?
- 17. क्लोजर में समग्र कुंजी कैसे कार्यान्वित कर सकते हैं?
- 18. क्लोजर
- 19. क्लोजर
- 20. क्लोजर
- 21. क्लोजर में मैं "defn" मैक्रो कैसे लिख सकता हूं?
- 22. क्लोजर
- 23. जावा क्लोजर प्रकार, चर, सरणी और संग्रह
- 24. क्लोजर में मैं अपवाद कैसे फेंक सकता हूं?
- 25. क्लोजर
- 26. क्लोजर ऑब्जेक्ट उन्मुख है अपने दिल में? (Seqs में polymorphism)
- 27. क्लोजर/अंगूठी में, मैं कुकी कैसे हटा सकता हूं?
- 28. क्लोजर
- 29. मानचित्र से क्लोजर रिकॉर्ड कैसे पॉप्युलेट करें?
- 30. मैं क्लोजर
क्या कोई कारण है कि रिकॉर्ड का वेक्टर एक प्रतिनिधित्व के रूप में अपर्याप्त है? (मेरा मतलब यह एक गंभीर सवाल है, न कि स्नैक्स)। बंद करने का एपीआई इस तरह के एक अमूर्तता के साथ काम करेगा। क्लोजर के तर्क से http://clojure.org/rationale - "10 डेटा संरचनाओं पर 10 कार्यों को संचालित करने के बजाय 100 कार्यों को एक डेटा संरचना पर संचालित करना बेहतर है।" - एलन जे पेरलिस –
कारण यह है कि जब मैं वेक्टर में कोई आइटम जोड़ता हूं, तो मैं चाहता हूं कि आइटम स्वचालित रूप से डेटास्टोर पर बने रहें, और कोई तरीका नहीं है कि मैं इसे छुपा सकता हूं कि conj या cons या फिर जो भी फ़ंक्शन है वेक्टर के लिए। – Zubair
इस तरह की चीज़ के साथ सुपर, सुपर सावधान रहें। यदि आप डीबी अपरिवर्तनीय नहीं हैं तो आप मूल रूप से क्लोजर के लिए अपने अर्थशास्त्र के बारे में झूठ बोल रहे हैं, यह बहुत जल्दी गलत हो सकता है। क्लोजर का अधिकांश विचार इस विचार पर बनाया गया है कि संग्रह अपरिवर्तनीय हैं। चूंकि इस तरह की कई धारणाएं होती हैं कि कुछ कार्य कैसे कार्य करते हैं। उदाहरण के लिए, संग्रह पर conj का उपयोग संग्रह को बदलना नहीं चाहिए। इसे एक नया संग्रह वापस करना चाहिए। इस नियम को तोड़ने से क्लोजर के काम बहुत अजीब तरीके से विफल हो सकते हैं। –