我有一个局部变量,必须将一些文本存储为列表/向量。
我想根据某些条件向这些向量添加值,所以我要做的只是将值添加到向量中,并最终得到这个向量的更新版本。
但是,当我尝试使用!交换时,我总是会得到一个错误。
我试过这两种选择:
(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位于加载程序的未命名模块中)
和:
(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位于加载程序的未命名模块中)
发布于 2019-11-04 21:14:36
这不是局部变量,而是let绑定。您已经将名称错误列表绑定到第一个片段中的值'()和第二个片段中的[]。
swap!是一个用于更新原子值的函数。你没有原子,你有(第一个片段)一个列表,(第二个片段)一个向量。您可以将其中任何一个封装在Atom中,以便使用atom函数允许可变状态。
(do
(let
[error-list (atom [])]
(println (swap! error-list conj "test"))
(swap! error-list conj "test2")
@error-list))
[test]
["test" "test2"]
user=>https://stackoverflow.com/questions/58700950
复制相似问题