在clojure上保存状态

Max*_*iro 0 clojure compojure ring compojure-api

我现在开始进行函数式编程,而且在没有变量的情况下工作变得非常疯狂.

我读过的每个教程都说它不是很酷的重新定义变量,但我不知道如何在不保存变量状态的情况下解决我的实际问题.

例如:我正在研究API,我希望在请求中保留值.让我们说我有一个端点,添加一个person,我有一个列表persons,我想redefine或改变我的persons列表添加新的值person.我怎样才能做到这一点?

可以使用var-set,alter-var-root或者conj!

(对于api我正在使用compojure-api,每个person都是一个Hash)

fix*_*xer 6

Clojure将值与身份区分开来.您可以使用atoms来管理compojure应用程序中的状态.

(def persons (atom [])) ;; init persons as empty vector
(swap! persons #(conj % {:name "John Doe"})) ;; append new value
Run Code Online (Sandbox Code Playgroud)

您可以在文档中找到更多内容:

https://clojure.org/reference/atoms

https://clojure.org/reference/data_structures

https://clojuredocs.org/clojure.core/atom