Clojure国家如何运作?

时间:2013-03-26 08:36:25

标签: clojure quil

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

1 个答案:

答案 0 :(得分:3)

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

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