gpt4 book ai didi

动态 var 的 Clojure 绑定(bind)未按预期工作

转载 作者:行者123 更新时间:2023-12-02 14:59:13 25 4
gpt4 key购买 nike

据我了解,在动态变量上设置新绑定(bind)会影响该绑定(bind)内调用的所有函数以及从这些函数调用的所有函数。

为什么在下面的第一个示例中绑定(bind)似乎丢失了?

(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")

最佳答案

这是由惰性引起的 - map 返回一个惰性序列,该序列在绑定(bind)内部定义,但在外部求值。您需要从内部强制评估:

(binding [*out-dir* "/home/dave"] 
(doall (map #(str *out-dir* %) [1 2 3])))

关于动态 var 的 Clojure 绑定(bind)未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33500282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com