clojure.core.cache 使用他们自己的示例无法正常工作

问题描述 投票:0回答:1

我刚刚将 clojure.core.cache 0.6.1 添加到我的项目中,做了一个 lein deps,遵循这里非常简短而清晰的示例:https://github.com/clojure/core.cache 并且它只是平淡无奇不起作用。

示例:

$lein repl
REPL started; server listening on localhost port 20513
user=> (require '[clojure.core.cache :as cache])
nil
user=> (def fifoc (cache/fifo-cache-factory {}))
#'user/fifoc
user=> (cache/has? fifoc :foo)
false
user=> (cache/miss fifoc :foo "bar")
{:foo "bar"}
user=> (cache/has? fifoc :foo)
false

这里出了什么问题?我完全没有抓住要点吗?我已经用其他缓存后端尝试过,结果都相同。尝试使用不同的键,不同的值,不同的命名空间,不同的别名 - nada。运行测试给我这个:

$ lein test clojure.core.cache.tests

Testing clojure.core.cache.tests

Ran 13 tests containing 273 assertions.
0 failures, 0 errors.

这使得这一切变得更加神秘。我查看了测试,虽然它们:导入缓存后端并以 java 方式实例化它们(miss (BasicCache.{}) ...),我也尝试过,但对我来说也以完全相同的方式失败。

在我实施一个有效的方案之前有什么帮助吗?

caching clojure leiningen
1个回答
15
投票

cache/miss
返回一个新的缓存对象,您需要使用它来进行进一步的操作。

例如:

user=> (cache/has? (cache/miss fifoc :foo "bar") :foo)
true

你的例子变成:

user=> (def fifoc (atom (cache/fifo-cache-factory {})))
#'user/fifoc
user=> (swap! fifoc  #(cache/miss % :foo "bar"))
{:foo "bar"}
user=> (cache/has? @fifoc :foo)
true
© www.soinside.com 2019 - 2024. All rights reserved.