"No se encontró un método único [...] para la función" tratando de usar un protocolo
Frecuentes
Visto 1,336 veces
6
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.
1 Respuestas
12
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 clojure or haz tu propia pregunta.