虽然可以使用 memo-clear! 强制刷新,但我们出于效率考虑进行缓存,因此提供一个手动设置缓存值的简单方法会很好。这是实现它的方法之一
(defn memo-miss!
"Reaches into a core.memo-populated function and sets the cached value
for a given seq of function args."
[f args result]
(when-let [cache (cache-id f)]
(swap! cache clojure.core.cache/miss args (delay result))))
(testing "that setting cache values works as expected"
(is (memo-clear! id))
(is (memo-miss! id [29] :x))
(is (= :x (id 29)))
(is (= 42 (id 42))))
遵循现有的代码风格,这可以写成:
(defn memo-miss!
"Reaches into a core.memo-populated function and sets the cached value
for a given seq of function args."
[f args result]
(when-let [cache (cache-id f)]
(swap! cache
(constantly (clojure.core.cache/miss @cache args (delay result))))))
我不明白为什么 swap!... 持续被首选,或者它与 reset! 有什么不同,但我也没有维护者数十年的经验!