【问题标题】:Clojure: use vector within an atom?Clojure:在原子内使用向量?
【发布时间】:2023-04-04 18:53:01
【问题描述】:

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

(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)

我在这里做错了什么?

【问题讨论】:

  • 那行得通 - 所以,swap!deref-ed 原子发送给给定的函数。谢谢!
  • 很奇怪。我添加了一条评论,因此从@loki 中删除了原始评论。还是谢谢!

标签: clojure atomic


【解决方案1】:

感谢@loki 通过评论提供答案。 swap! 函数将 deref-ed 原子发送到交换函数。因此,我需要从我的解决方案中删除我对 @ 所做的 deref:

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

【讨论】:

  • 我第一种方法的错误仍然不直观。
【解决方案2】:

如果您的name-seq 是一个固定长度的向量,那么您可以使用update-in function 这样做:

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

【讨论】:

  • 谢谢!问题是我在交换 fn 中取消了引用,但这是一个很好且简洁的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
相关资源
最近更新 更多