Clojure 状态如何工作



我知道从概念上讲状态是什么,但我无法理解它在这个例子中是如何实现的: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( 中。

相关内容

  • 没有找到相关文章

最新更新