我有一个Clojure库,它定义了一个MQHandle
协议,并扩展了它
(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"
...)
...但是当我尝试使用它时:
(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
我不了解这个例外的含义,或者我应该做的不同。
答案 0 :(得分:12)
协议功能不支持其他参数。