首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将PersistentVector转换为IAtom类

不能将PersistentVector转换为IAtom类
EN

Stack Overflow用户
提问于 2019-11-04 20:58:52
回答 1查看 548关注 0票数 1

我有一个局部变量,必须将一些文本存储为列表/向量。

我想根据某些条件向这些向量添加值,所以我要做的只是将值添加到向量中,并最终得到这个向量的更新版本。

但是,当我尝试使用!交换时,我总是会得到一个错误。

我试过这两种选择:

代码语言:javascript
复制
(do
  (let
    [error-list ()]
    (println (conj error-list "test"))
    (swap! error-list conj "test2")))

结果:

(测试)

线程"main“java.lang.ClassCastException中的异常:无法将类clojure.lang.PersistentVector转换为clojure.lang.IAtom类(clojure.lang.PersistentVector和clojure.lang.IAtom位于加载程序的未命名模块中)

和:

代码语言:javascript
复制
(do
  (let
    [error-list []]
    (println (conj error-list "test"))
    (swap! error-list conj "test2")))

结果:

测试

线程"main“java.lang.ClassCastException中的异常:无法将类clojure.lang.IAtom转换为类clojure.lang.IAtom (clojure.lang.PersistentList$EmptyList和clojure.lang.IAtom位于加载程序的未命名模块中)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 21:14:36

这不是局部变量,而是let绑定。您已经将名称错误列表绑定到第一个片段中的值'()和第二个片段中的[]。

swap!是一个用于更新原子值的函数。你没有原子,你有(第一个片段)一个列表,(第二个片段)一个向量。您可以将其中任何一个封装在Atom中,以便使用atom函数允许可变状态。

代码语言:javascript
复制
(do
  (let
    [error-list (atom [])]
    (println (swap! error-list conj "test"))
    (swap! error-list conj "test2")
    @error-list))
[test]
["test" "test2"]
user=>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58700950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档