मैं अपने प्रकार में एक फ़ंक्शन रखना चाहता हूं जो वैकल्पिक तर्क लेता है। मैंने उन कार्यों में वैकल्पिक तर्कों का सफलतापूर्वक उपयोग किया है जो एक प्रकार से संबंधित नहीं हैं, हालांकि, मुझे लगता है कि यह प्रोटोकॉल और प्रकार के भीतर काम नहीं कर रहा है।डिफप्रोटोकॉल में वैकल्पिक तर्कों का उपयोग कैसे करें?
मेरे विफल रहा है परीक्षण:
Clojure 1.4.0
user=> (defprotocol OptArg
(func [this a & b]))
OptArg
user=> (deftype Imp [] OptArg
(func [this a & b] (println a b)))
user.Imp
user=> (func (Imp.) 1 2)
CompilerException java.lang.IllegalArgumentException: No single method: func of interface: user.OptArg found for function: func of protocol: OptArg, compiling:(NO_SOURCE_PATH:5)
user=> (defn opt-arg [a & b] (println a b))
#'user/opt-arg
user=> (opt-arg 1 2)
1 (2)
nil
user=> (opt-arg 1)
1 nil
nil
user=>
बहुत बहुत शुक्रिया। क्लोजर शुरुआती के रूप में मैं वास्तव में चाहता हूं कि इसके त्रुटि संदेश कुछ समझ सकें। –
+1। लेकिन यह जोड़ने के लायक है कि एक अच्छा समाधान प्रोटोकॉल के बाहर एक विधि बनाना है जो * var * का समर्थन करता है, और यह फ़ंक्शन प्रोटोकॉल में उपयुक्त फ़ंक्शन को कॉल करता है – mikera