"No method was found [...] for the function" tries to use the protocol "

I have a Clojure library that defines the 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 do not understand the meaning of this exception or what I should do differently.

+6
source share
1 answer

Protocol functions do not support rest arguments.

+12
source

Source: https://habr.com/ru/post/914824/


All Articles