20
Clojure 1.2 में:निम्नलिखित क्लोजर प्रोटोकॉल में क्या गलत है?
(defprotocol PP
(foo [bar])
(foo [bar baz]))
=> PP
(extend-protocol PP
Object
(foo [bar] 1)
(foo [bar baz] 2))
=> nil
(foo "hello!")
=> #<CompilerException java.lang.IllegalArgumentException: No single method: foo of interface: PP found for function: foo of protocol: PP
कहाँ मैं गलत हो रहा हूँ? मैं foo फ़ंक्शन के एकल-तर्क संस्करण के परिणाम के रूप में 1 को देखने की अपेक्षा करता हूं, क्योंकि "हैलो!" स्पष्ट रूप से java.lang.Object का एक उदाहरण है।
धन्यवाद! बहुत रोचक, मुझे एहसास नहीं हुआ कि इस तरह से परिभाषाओं को ओवरराइट करना संभव था ... एक स्नीकी गॉचा की तरह लगता है! – mikera