Clojure 使用atom作为所用函数的最后一个参数进行交换

Clojure 使用atom作为所用函数的最后一个参数进行交换,clojure,atomic,swap,Clojure,Atomic,Swap,我有以下功能: (defn add-recommendations-to-cache [{:keys [trackingId rec-service recs]} cache] (assoc-in cache [trackingId rec-service] recs)) 我的原子定义为: (def cache (atom {})) 如果我可以更改传递给函数的参数的顺序,我将使用: (swap! cache add-recommendations-to-cache msg) 既然我不能

我有以下功能:

(defn add-recommendations-to-cache [{:keys [trackingId rec-service recs]} cache]
  (assoc-in cache [trackingId rec-service] recs))
我的原子定义为:

(def cache (atom {}))
如果我可以更改传递给函数的参数的顺序,我将使用:

(swap! cache add-recommendations-to-cache msg)
既然我不能,我如何使用atom、函数和包含第一个参数所需内容的消息来交换?我尝试了几种可能的组合(见下文),但似乎都不起作用

我试过:

(swap! cache add-recommendations-to-cache msg cache)


和其他几个函数都没有用。

您可以传递自己的函数,该函数按照您想要的顺序应用参数:

(swap! cache 
       (fn [current msg] (add-recommendations-to-cache msg current))
       msg)

或关闭
msg

(swap! cache #(add-recommendataions-to-cache msg %))

您可以传递自己的函数,该函数按所需顺序应用参数:

(swap! cache 
       (fn [current msg] (add-recommendations-to-cache msg current))
       msg)

或关闭
msg

(swap! cache #(add-recommendataions-to-cache msg %))

我认为以味精结尾的那个整体上更好。我认为以味精结尾的那个整体上更好。