documentation of Clojure's type mechanisms में, यह कहा गया है किक्लोजर कोर लाइब्रेरी कंक्रीट व्युत्पन्न का उपयोग क्यों करती है?
- कंक्रीट व्युत्पत्ति बुरा
- आप ठोस वर्ग से डेटाटाइप्स प्राप्त नहीं सकता है, केवल इंटरफेस
हालांकि, कुछ core Clojure classes कंक्रीट व्युत्पन्न का उपयोग करें (टी यहाँ अन्य उदाहरण हैं, लेकिन इनमें से केवल मामलों में सुपर क्लास clojure.lang
का हिस्सा) है कर रहे हैं:
ARef
फैलीAReference
Agent
फैलीARef
Atom
फैलीARef
Namespace
फैलीAReference
Ref
ARef
01 बढ़ाता है
Var
फैलीARef
इसके अलावा, कई सार वर्ग हैं। हालांकि, क्लोजर में एक अमूर्त वर्ग के बराबर बनाने का कोई तरीका नहीं है, और मेरे लिए, एक अमूर्त वर्ग के विस्तार में नियमित कंक्रीट व्युत्पन्न के रूप में सभी समान कमीएं होती हैं।
कंक्रीट व्युत्पन्न यहां क्यों उपयोग किया जाता है?
वही पृष्ठ उत्परिवर्तन और encapsulation के खिलाफ भी चेतावनी देता है, फिर भी 'clojure.lang' में कक्षाओं में बहुत से परिवर्तनीय निजी क्षेत्र शामिल हैं। इस भाषा के आंतरिक कार्यान्वयन विवरण को भ्रमित न करें कि इसका उपयोग कैसे किया जाना है। – Alex
@Alex एकमात्र कारण मुझे लगता है कि 'clojure.lang' में इंटरफेस का विस्तार क्लोजर में नए डेटा संरचनाओं को लागू करने के लिए * केवल * तरीका है जो' clojure.core' में फ़ंक्शंस के अनुकूल हैं। अगर उस पैकेज में सब कुछ वास्तव में कार्यान्वयन विवरण है, तो इस तरह के विस्तार के लिए इसके कार्यकलापों के ज्ञान की आवश्यकता नहीं होनी चाहिए। –