Clojure:在原子中使用向量?

时间:2014-04-21 05:38:32

标签: clojure atomic

我创建了一个包含向量的原子:

(def name-seq (atom ["A" 1]))

swap!操作中,我需要增加向量的最后部分的数字。这是我正在尝试的内容:

(swap! name-seq #(["A" (inc (last @%))]))

我收到以下错误:ClassCastException clojure.lang.PersistentVector cannot be cast to java.util.concurrent.Future clojure.core/deref-future (core.clj:2108)

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

感谢@loki通过评论回答。 swap!函数将deref-ed atom发送给交换函数。因此,我需要从我的解决方案中删除我使用@进行的deref:

(swap! name-seq #(["A" (inc (last %))]))

答案 1 :(得分:1)

如果您的name-seq是固定长度的向量,那么您可以使用update-in function来执行此操作:

(swap! name-seq #(update-in % [1] inc))