据我所知,在动态变量上设置新绑定会影响绑定中调用的所有函数以及从这些函数调用的所有函数。动态变量的Clojure绑定无法按预期方式工作
为什么绑定在下面的第一个示例中似乎丢失? map
返回其内部的结合定义,但外评价懒惰序列 -
(def ^:dynamic *out-dir* "/home/user")
(binding [*out-dir* "/home/dave"] (map #(str *out-dir* %) [1 2 3]))
; gives: ("/home/user1" "/home/user2" "/home/user3")
; expected: ("/home/dave1" "/home/dave2" "/home/dave3")
(binding [*out-dir* "/home/dave"] (conj (map #(str *out-dir* %) [1 2 3]) *out-dir*))
; gives: ("/home/dave" "/home/dave1" "/home/dave2" "/home/dave3")
嗯,就是这样。能够在这里找到更多有关绑定陷阱的更多信息:[链接](http://cemerick.com/2009/11/03/be-mindful-of-clojures-binding/) –
@DavidVail,请注意,事情自撰写博客文章以来已有所改进(仅在一个月后,Clojure 1.1引入了“bound-fn”)。 – galdre