【发布时间】:2012-10-07 14:31:51
【问题描述】:
我查看了参考资料:http://clojure.org/vars#Vars%20and%20the%20Global%20Environment、http://clojuredocs.org/clojure_core/clojure.core/binding
还有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 中动态作用域的含义:stuartsierra.com/2013/03/29/perils-of-dynamic-scope
标签: clojure dynamic-scope