"No single method [...] found for function" trying to use a protocol

clojure

Solution

Protocol functions don't support rest arguments.

Problem

I have a Clojure library which defines a `MQHandle` protocol, and extends it ``` (ns example.mq (:import [java.util.concurrent BlockingQueue])) (defprotocol MQHandle (send-message [this key body & params]) (extend-type BlockingQueue MQHandle (send-message [this key body & params] (.put this (merge {::key key, ::body body} (into {} (partition 2 params))))) (defn get-handle ^BlockingQueue [& config] "return a BlockingQueue tied to a thread which consumes messages and submits them to a remote message queue" ...) ``` ...but when I try to use it: ``` (require '[example.mq :as mq]) (def handle (mq/get-handle config)) (satisfies? mq/MQHandle handle) ; => true (mq/send-message handle "key" "body") ; java.lang.IllegalArgumentException: No single method: send_message of interface: ; com.indeed.clojure_network_repl.mq.MQHandle found for function: send-message of ; protocol: MQHandle ``` I don't grok the meaning of this exception, or what I should be doing differently.

Original source