"No se encontró un método único [...] para la función" tratando de usar un protocolo

Tengo una biblioteca Clojure que define un MQHandle protocolo, y lo extiende

(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"
   ...)

... pero cuando trato de usarlo:

(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

No asimilo el significado de esta excepción, o lo que debería estar haciendo de manera diferente.

preguntado el 03 de mayo de 12 a las 17:05

1 Respuestas

Las funciones de protocolo no admiten argumentos de descanso.

contestado el 03 de mayo de 12 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.