更新Clojure原子属性



将新值连接到驻留在映射或原子中的向量中的惯用方法是什么?

我最接近的是以下内容:

(def blog (atom {:posts []}))
(swap! 
    blog 
    (fn [current] 
        {:posts (conj (:posts current) {:title "War of Worlds"})}))

结果是:

{:posts [:title "War of Worlds"]}

lambda的使用让人觉得不必要的冗长。

我会这么做:

(swap! blog update-in [:posts] conj {:title "War of the Worlds"})

两者互换!按照"更新模型"的形式进行更新,它们可以像这样链接在一起。这是一种非常常见的模式,尤其是有状态容器和嵌套映射更新。

"更新模型"表示形式的函数:(defn u [context f & args])调用为(apply f context args)

最新更新