2013-09-27 17 views
2

我學習的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)。 我完成打字後意識到了答案。我想我會發布這個問題, 也許它會對別人有用。

回答

2

map生成一個懶惰序列,在這種情況下,直到repl打印該值纔會強制執行評估。

在這一點上,*max-value*不再綁定到500

如果使用mapv代替,[true]將被退回!