Clojure:绑定和地图的组合表现得很奇怪?

时间:2013-09-27 09:51:24

标签: clojure

我正在学习Clojure,而且我没有得到这段代码背后的逻辑:

(def ^:dynamic *max-value* 250)
(defn valid-value? [v]
  (<= v *max-value*))

(binding [*max-value* 500]
  (prn (map valid-value? [299]))
  (map valid-value? [299]))

它会打印(true),但会返回(false)。 我完成打字时意识到了答案。我想无论如何我都会发布这个问题, 也许它会对其他人有用。

1 个答案:

答案 0 :(得分:2)

map生成一个惰性序列,在这种情况下,在repl打印该值之前,不会强制进行评估。

此时,*max-value*不再绑定到500。

如果您使用mapv,则会返回[true]