मान लीजिए मैं दो प्रोटोकॉल है:आप किसी अन्य प्रोटोकॉल पर क्लोजर प्रोटोकॉल कैसे बढ़ा सकते हैं?
(defprotocol A
(f [this]))
(defprotocol B
(g [x y]))
और मैं सभी उदाहरणों का समर्थन करने वाले प्रोटोकॉल एक करने के लिए प्रोटोकॉल बी का विस्तार करना चाहते:
(extend-protocol A
String
(f [this] (.length this)))
(extend-protocol B
user.A
(g [x y] (* (f x) (f y))))
प्राथमिक प्रेरणा सभी के लिए अलग से बी का विस्तार करने के लिए होने से बचने के लिए है संभावित वर्ग जिन्हें ए को विस्तारित किया जा सकता है, या यहां तक कि अज्ञात भविष्य के वर्गों तक भी, जो अन्य लोग ए को बढ़ा सकते हैं (कल्पना करें कि ए सार्वजनिक रूप से सार्वजनिक एपीआई का हिस्सा था या नहीं)।
हालांकि यह काम नहीं करता - आप निम्नलिखित की तरह कुछ मिलता है:
(g "abc" "abcd")
=> #<IllegalArgumentException java.lang.IllegalArgumentException:
No implementation of method: :g of protocol: #'user/B found for
class: java.lang.String>
बिल्कुल यह संभव है? यदि नहीं, तो क्या वही उद्देश्य प्राप्त करने के लिए एक समझदार कामकाज है?
धन्यवाद। मुझे लगता है कि यह मेरे मामले में सबसे अच्छा तरीका है - अनुक्रम पुस्तकालय के साथ समानता अच्छी तरह से काम करती है! – mikera