有没有更好的方法在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".

以上是有没有更好的方法在Clojure中将事物构建为原子?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>