2010-09-10 18 views

उत्तर

3

आप इन लेखों और लिंक दिलचस्प लग सकते हैं:

+0

आपके लिंक के लिए धन्यवाद। –

2

वे समान नाम साझा करते हैं और अवधारणाएं संबंधित होती हैं - हालांकि क्लोजर प्रोटोकॉल अधिक सामान्य और "अभिव्यक्ति समस्या" को हल करने के लिए डिज़ाइन किए गए हैं। यह video is very interesting to watch

उद्देश्य सी प्रोटोकॉल अधिक जावा/सी # इंटरफेस तरह हैं - वे तरीकों कि एक ठोस वर्ग को लागू कर सकते हैं का एक सेट निर्दिष्ट। हालांकि आपको इन विधियों को कंक्रीट क्लास में प्रदान करना है, जो आमतौर पर अभ्यास में है कि आप जिस वर्ग को विस्तारित कर रहे हैं उसके लिए स्रोत कोड को नियंत्रित करते हैं।

Clojure प्रोटोकॉल आप कार्यों कि एक बहुरूपी फैशन में किसी भी वर्ग को संभालने के लिए विस्तार का एक सेट को परिभाषित अनुमति देते हैं, और आप कार्यान्वयन अलग से प्रदान कर सकते हैं, भले ही आप वर्ग आप बढ़ा रहे हैं पर नियंत्रण नहीं है।

विशेष मूल्य नहीं के बराबर (यानी एक शून्य मान), उदाहरण के लिए java.lang.String वर्ग के लिए एक Clojure प्रोटोकॉल का विस्तार (आप निश्चित रूप से नियंत्रित नहीं करते हैं जो!) और यह भी का एक उदाहरण:

;; define a protocol with one function 
(defprotocol FooProtocol 
    (foo [this])) 

;; extend the protocol to String and nil 
(extend-protocol FooProtocol 
    java.lang.String 
    (foo [some-string] (str "Called foo on String: " some-string)) 
    nil 
    (foo [_] "Called foo on nil value")) 

(foo "hello") 
=> "Called foo on String: hello" 

(foo nil) 
=> "Called foo on nil value" 
संबंधित मुद्दे