2013-03-26 65 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