我知道从概念上讲状态是什么,但我无法理解它在这个例子中是如何实现的:https://github.com/quil/quil/blob/master/examples/gen_art/31_oo_circles.clj
我只是根本看不到它。状态实现发生在第 100、109 和 137 行:
98-100:
(defn mouse-released []
(add-circles (state :circles)))
109:
(set-state! :circles circles*)
135-140:
(defn draw []
(background 255)
(let [circles* (state :circles)
circles (swap! circles* update-circles)]
(doseq [c circles]
(draw-circle c))))
这些方面发生了什么?
set-state!是一个Quil方法,它的实现可以在 https://github.com/quil/quil/wiki/set~state%21
简短的回答:它使用的是applet.clj中定义的原子
它是在第 17 行的 core.clj 中定义的一个函数,它提取存储为附加到小程序元数据的原子的状态信息。设置状态首先通过调用从小程序对象中提取元数据(映射((:state (meta (current-applet))
来查找存储当前"状态"的原子,然后返回存储在 :state 键中的原子。然后它调用reset!
在这个原子中放置一个新值。它包含在ns
声明中的 (:use quil.core( 中。