如何在 clojure 中记住 api 响应?

How to memoize an api response in clojure?

我想 memoize 一个函数 return 一个函数向 API 发出一个 http 请求。

我做不到。

(defn _get_userid 
  [id cid]   
  (p1.nms2/get_uerid id cid))

(def get_userid   
  (memo/ttl _get_userid 
            {} 
            :ttl/threshold p1.constant/ttl-millisecs))

鉴于你的第二个参数就像一个上下文(用于日志记录),你可以使用动态变量,这样你就不需要将它作为一个额外的参数传递给你的记忆函数。

(def ^:dynamic *cid* nil)

(def get-userid
  (memoize
   (fn [id]
     {:input   id
      :context *cid*
      :output  (inc id)})))

(binding [*cid* "what"]
  (get-userid 1))
;; => {:input 1, :context "what", :output 2}

(binding [*cid* "when"]
  (get-userid 1))
;; => {:input 1, :context "what", :output 2}

(binding [*cid* "why"]
  (get-userid 2))
;; => {:input 2, :context "why", :output 3}