2012-09-24 55 views
4

我正在寻找一个像一个矢量行为的缓存。我一直在使用core.cache,但这些都是地图。我只需要一个简单的先遣队驱逐方法。我意识到我可以简单地使用CacheProtocol协议创建自己的协议,但我想知道这样的事情是否已经存在,或者是否有理由这是一个坏主意。clojure矢量缓存

+0

Ju我明白这个问题;你想要一个矢量的内容被缓存在每个索引的元素被替换为新值的时候变得可用吗? –

+0

雅这就是我正在寻找。然而,我不认为关于转移所有元素的开销会引入。这回答了我的问题的最后部分:“这是一个坏主意吗?” =>“是” –

回答

2

如果您只需要一个像缓存接口的向量,那么缓存的索引值就可以满足您的需求。我猜了一下你的具体问题,但它很可能是使用数字作为键缓存将填补许多用例因为向量在概念上非常相似,数字地图,值:

user> (def C (cache/fifo-cache-factory {0 1 1 0})) 
user> (get C 0) 
1 

如果这还不够,那么你可以看看你的缓存的当前内容的载体形式,像这样:

user> (vec (map #(get C % nil) (range 11))) 
[1 0 nil nil nil nil nil nil nil nil nil] 

在大多数情况下,它很可能是使用数字作为指标将会对许多人

做的工作