我看看引用:http://clojure.org/vars#Vars%20and%20the%20Global%20Environment,http://clojuredocs.org/clojure_core/clojure.core/bindingclojure的動態變量和約束力的實用目的是什麼?
以及clojure and ^:dynamic和Clojure Dynamic Binding
我還是不明白,爲什麼有必要binding
可言,因爲每個程序我已經寫了已經沒有它們,我可以找到方法以常規方式編寫示例 - 我覺得這更容易理解。有沒有項目/編程範例的例子可以使用這個?
例如......在動物說話例如,你可以得到類似的效果:
(def dog {:name "Dog" :sound "Woof"})
(def cat {:name "Cat" :sound "Meow"})
(defn speak [animal]
(str (:name animal) " says " (:sound animal))
(println (speak dog))
(println (speak cat))
沒有宏,沒有動態綁定...還是很乾淨的。
Stuart Sierra在本博客文章中討論了Clojure中動態範圍的影響:http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope –