2010-03-19 19 views
7

क्लोजर structs को मनमाने ढंग से बढ़ाया जा सकता है, नए क्षेत्रों को जोड़ना।क्या मैं क्लोजर प्रकारों में फ़ील्ड जोड़ सकता हूं?

क्या इसी तरह से प्रकार (डेफटाइप का उपयोग करके बनाया गया) विस्तार करना संभव है?

संपादित करें: लाभ के लिए भविष्य के आगंतुकों के रूप में, ब्रायन ने नीचे बताया, यह सुविधा बदल सकती है।

+0

डेफ्टाइप अभी भी प्रगति पर एक काम है, चीजें बदल सकती हैं। उदाहरण देखें http://groups.google.com/group/clojure/browse_frm/thread/a8b4a1a00fe8d0f2/2ff645127490228b –

+0

धन्यवाद, वह धागा मदद करता है। –

उत्तर

7

असल में आप प्रकारों को नक्शे के रूप में देख सकते हैं, आपको केवल clojure.lang.IPersistentMap (एक कार्यान्वयन जादुई रूप से आपूर्ति किया जाता है) का विस्तार करने की आवश्यकता है।

(deftype A [a b] 
    clojure.lang.IPersistentMap) 
(A 1 2) ;; => #:A{:a 1, :b 2} 
(assoc (A 1 2) :c 3) ;; => #:A{:a 1, :b 2, :c 3} 

नोट

Clojure है विभाजन के बाद से defrecord और deftype में प्रकार के शब्दों। अधिकांश एप्लिकेशन-स्तरीय प्रोग्रामिंग के लिए, आप रिकॉर्ड का उपयोग करना चाहेंगे। सुविधाजनक रूप से, वे स्वचालित रूप से clojure.lang.IPersistentMap का कार्यान्वयन प्रदान करते हैं, कोई जादू आवश्यक नहीं है।

+1

मुझे जादुई आपूर्ति की चीज़ें पसंद हैं। जवाब के लिए धन्यवाद। –

+0

यह क्लोजर 1.2 में काम नहीं करता है, आपको बस एक java.lang.AbstractMethodError मिल जाएगा, जैसा कि आप बिना किसी कार्यान्वयन के उम्मीद करेंगे। –

+0

यह क्लोजर 1.2 की प्रारंभिक बीटा रिलीज के लिए मान्य था। मैंने अंतिम रिलीज में बदलावों का जिक्र करने के लिए एक नोट जोड़ा है। –

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

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