如何在 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}
我想 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}