有没有更好的方法在Clojure中将事物构建为原子?
为了建立一个数据结构,我发现自己做了很多事情,比如:
(let [foo (atom [])]
(do
(swap! foo conj {:foo "bar"})
(swap! foo conj {:foo "baz"}))
@foo)
=> [{:foo "bar"} {:foo "baz"}]
这是一种反模式吗?我使用了很多原子。
回答
atom这里不需要。您可以使用不可变的数据结构:
(-> []
(conj {:foo "bar"})
(conj {:foo "baz"}))
;;=> [{:foo "bar"} {:foo "baz"}]
对于来自 OOP 或命令式语言的人来说,这可能是最困难的转变:避免可变性。
- Most cljs apps have a single atom containing their "state".