Clojure州是如何运作的?

Clojure州是如何运作的?,clojure,quil,Clojure,Quil,我从概念上知道状态是什么,但我不明白在这个示例中是如何实现的: 我就是不明白。在第100行、第109行和第137行执行状态: 98-100: (defn mouse-released [] (add-circles (state :circles))) 109: (设置状态!:圆圈*) 135-140: (defn draw [] (background 255) (let [circles* (state :circles) circles (swap! cir

我从概念上知道状态是什么,但我不明白在这个示例中是如何实现的:

我就是不明白。在第100行、第109行和第137行执行状态:

98-100:

(defn mouse-released []
  (add-circles (state :circles)))
109:

(设置状态!:圆圈*)

135-140:

(defn draw []
  (background 255)
  (let [circles* (state :circles)
        circles (swap! circles* update-circles)]
    (doseq [c circles]
      (draw-circle c))))
这些线路上发生了什么


设置状态是一种Quil方法,其实现可以在

中找到。简短的回答是:它使用applet.clj中定义的

这是第17行中定义的一个函数,它提取作为原子存储的状态信息,并附加到applet上的元数据。设置状态首先通过调用
(:state(meta(current applet))
从applet对象中提取元数据(这是一个映射),找到存储当前“状态”的原子,然后返回存储在:state键中的原子。然后调用
reset!
将新值放入该原子。
它被(:use quil.core)包含在
ns
声明中。

你知道像Atom和Ref这样的clojure STM构造吗?在这个上下文中,“state”是一个var的名称(在我看来不是最有创意的名称,但它能表达观点)我知道设置状态来自Quil,但我的问题是设置状态到底意味着什么?