यह तीन अलग-अलग कारकों का मिश्रण है:
- जेवीएम की विशेष प्रकार की प्रणाली
- प्रकारों को परिभाषित करते समय विभिन्न उपयोग के मामलों के लिए थोड़ा अलग शब्दार्थ की आवश्यकता
- तथ्य यह है कि इनमें से कुछ पहले विकसित हुए थे, और कुछ बाद में, जैसा कि भाषा विकसित हुई है।
तो पहले, आइए विचार करें कि ये क्या करते हैं। deftype और gen-class समान हैं, जिसमें वे दोनों आगे-आगे संकलन के लिए एक नामित वर्ग को परिभाषित करते हैं। जनरल-क्लास पहले आया, इसके बाद क्लॉज्योर 1.2 में डेफ्थाइप था। Deftype को प्राथमिकता दी जाती है, और इसमें बेहतर प्रदर्शन विशेषताएँ होती हैं, लेकिन अधिक प्रतिबंधक होती है। एक deftype वर्ग एक इंटरफ़ेस के अनुरूप हो सकता है, लेकिन किसी अन्य वर्ग से विरासत में नहीं मिल सकता है।
Reify और प्रॉक्सी दोनों का उपयोग रनटाइम के दौरान एक अनाम वर्ग की आवृत्ति को गतिशील बनाने के लिए किया जाता है। प्रॉक्सी पहले आया था, क्लीज्योर 1.2 में डीफ़ेक्ट और डिफ्रेकॉर्ड के साथ रिवाइज़ आया। रिफ़ाइटर को प्राथमिकता दी जाती है, ठीक वैसे ही जैसे डेफ़टाइप है, जहाँ शब्दार्थ बहुत अधिक प्रतिबंधात्मक नहीं हैं।
यही कारण है कि दोनों deftype और defrecord का प्रश्न छोड़ देता है, क्योंकि वे एक ही समय में दिखाई देते हैं, और एक समान भूमिका होती है। अधिकांश उद्देश्यों के लिए, हम डिफ्रेकॉर्ड का उपयोग करना चाहेंगे: इसमें सभी विभिन्न क्लोजर अच्छाई है जो हम जानते हैं और प्यार करते हैं, क्रमबद्धता और आगे। अन्य डीटास्ट्रक्चर के कार्यान्वयन के लिए निम्न स्तर के निर्माण खंड के रूप में उपयोग के लिए डेफ़्टाइप का उपयोग किया जाता है। इसमें नियमित क्लोजर इंटरफेस शामिल नहीं है, लेकिन इसमें परिवर्तनशील फ़ील्ड्स का विकल्प होता है (हालांकि यह डिफ़ॉल्ट नहीं है)।
आगे पढ़ने के लिए देखें:
Clojure.org डेटाटिप्स पेज
Google समूह थ्रेड जहां deftype और reify पेश किए गए थे