ध्यान रखें कि ISeq तरह बातें जावा हैं।
क्लोजर में seq abstraction वास्तव में केवल 'कुछ' है जिसे आप पहले, आराम और nth कार्यों में आपूर्ति कर सकते हैं (ध्यान दें कि आप पहले एक सीक पर कॉल नहीं करते हैं, आप पहले सेक तर्क के साथ कॉल करते हैं)। क्लोजर भाषा कोर फ़ंक्शंस सभी संग्रह, seqs, या आदिम प्रकारों पर काम करते हैं। खुला इंटरफेस में विधियों के साथ कोई डेटा बंडल नहीं किया गया है। तो क्लोजर का कार्यान्वयन जावा में है और जेवीएम के साथ सभी इंटरऑप कक्षाओं/ऑब्जेक्ट्स को शामिल करने जा रहा है, लेकिन भाषा को क्लोजर नहीं करता है।
डेटा संरचनाओं के साथ बंडलिंग विधियां क्लोजर को हतोत्साहित करती हैं।
यह सब कहकर ... वास्तविकता यह है कि कार्यों में सीमाएं होती हैं कि वे किस तर्क के साथ काम करेंगे। पहले आराम और nth केवल कुछ ऐसी चीज पर काम करेगा जो एक सीक हो सकता है। इस परिप्रेक्ष्य से डेटा संरचनाओं को विधियों के साथ बंडल किया गया है या नहीं, इसमें कोई फर्क नहीं पड़ता है - आपको अभी भी उन्हें सही तरीके से मिलान करना होगा। लचीलापन से बड़ी जीत आती है। कार्य किसी भी तर्क लेने के लिए लिखा जा सकता है और उसके बाद उच्च आदेश कार्यों के साथ बना वर्गों आदि को परिभाषित करने के बिना:
(def farms [{:name "Swansea", :value 100}
{:name "Broadmarsh", :value 200, :produce [:corn :wheat :rye]}
{:name "Snug", :value 50, :animals [:goats :pigs]}])
(reduce + (map :value farms))
-> 350
(reduce + (map :value (filter :animals farms)))
-> 50
स्रोत
2009-10-13 00:27:26
के लिए एक स्रोत का लिंक "कथित तौर पर बिल्कुल नहीं वस्तु उन्मुख" है कि क्या तर्क पता लगाना में मददगार होगा तकनीकी बनाम राजनीतिक है ... –
http://clojure.org/rationale ओओपी के बारे में वार्ता और क्यों क्लोजर इसे टालता है। –
http://blog.thinkrelevance.com/2009/8/12/rifle-oriented-programming-with-clojure-2 एक दिलचस्प लेख है जो चर्चा करता है कि कैसे क्लोजर वास्तव में सभी प्रमुख ओओ प्रिंसिपल के उपयोग की अनुमति देता है। हालांकि मुझे लगता है कि उन्हें गठबंधन करना मुश्किल है। उदाहरण के लिए बंद encapsulation का उपयोग विरासत द्वारा विस्तार को शामिल नहीं करता है। सामान्य दृष्टिकोण विस्तारशीलता के पक्ष में encapsulation से गुजरना प्रतीत होता है। –