2013-03-26 60 views
3

我知道是什么状态的概念,但我不明白它是如何在这个例子中实现: https://github.com/quil/quil/blob/master/examples/gen_art/31_oo_circles.cljClojure状态如何工作?

我根本看不到它。国家执行情况上线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!是奎尔方法,其实现可以在https://github.com/quil/quil/wiki/set~state%21

+1

您是否知道类似Atom和Ref的clojure STM构造? – Ankur 2013-03-26 09:12:23

+1

在这种情况下,“状态”是一个var的名称(不是我认为的最有创意的名称,但它可以得到) – 2013-03-26 18:59:39

回答

3

发现短答案:它的使用在applet.clj

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

+0

我知道set-state来自Quil,但我的问题是准确设置状态意味着/怎么办? – 2013-03-26 18:41:32

+0

我会扩展我的答案来掩盖这一点,感谢您的反馈 – 2013-03-26 18:50:27