3

我知道概念上的状态是什么,但我不明白在这个例子中它是如何实现的: 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))))

这些线路上发生了什么?

设定状态!是一个 Quil 方法,它的实现可以在https://github.com/quil/quil/wiki/set~state%21找到

4

1 回答 1

3

简短的回答:它使用applet.clj 中定义的原子

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

于 2013-03-26T18:26:08.363 回答