2

我现在正在学习 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)。当我完成打字时,我意识到了答案。我想无论如何我都会发布这个问题,也许它对其他人有用。

4

1 回答 1

2

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

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

如果您使用mapv[true]将被退回!

于 2013-09-27T11:44:00.160 回答