在Clojure中代理命名参数的惯用方法

Jos*_*ver 3 clojure amazonica

我需要一个薄包装功能sqs/receive-message,以添加默认的等待时间.该函数需要一个队列URL,然后接受任意数量的可选命名参数,这些参数应该传递给sqs/receive-message未触及的.我想这样称呼它:

(my-receive-message "https://sqs.us-east-1.amazonaws.com/123/test-q"
                    :max-number-of-messages 10
                    :delete true)
Run Code Online (Sandbox Code Playgroud)

这应该会导致这样的调用sqs/receive-message:

(sqs/receive-message :queue-url "https://sqs.us-east-1.amazonaws.com/123/test-q"
                     :wait-time-seconds 20
                     :max-number-of-messages 10
                     :delete true)
Run Code Online (Sandbox Code Playgroud)

这是我发现自己想要经常做的事情,但我还没有找到一个好方法.这是否有惯用的方法?

Gui*_*ler 5

使用apply合并的参数.

(defn my-receive-message
  [url & {:as args}]
  (apply sqs/receive-message (-> {:queue-url url
                                  :wait-time-seconds 20}
                                 (merge args)
                                 seq 
                                 flatten)))
Run Code Online (Sandbox Code Playgroud)