2012-05-03 8 views
6

tengo una biblioteca Clojure que define un protocolo MQHandle, y lo extiende"No existe un método [...] encontrado para la función" tratando de utilizar un protocolo

(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 intento úselo:

(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 entiendo el significado de esta excepción, o lo que debería estar haciendo de manera diferente.

Respuesta

12

Las funciones de protocolo no son compatibles con los argumentos de descanso.

Cuestiones relacionadas