使用:在Clojure中使用修饰符

Hor*_*ace 6 clojure

我想知道在Clojure中:let使用for循环时修饰符的意义是什么?

Mic*_*ent 8

:let 让你定义命名值,就像let特殊形式允许你这样做:

(for [i (range 10) 
      :let [x (* i 2)]] 
  x) ;;=> (0 2 4 6 8 10 12 14 16 18)
Run Code Online (Sandbox Code Playgroud)

相当于:

(for [i (range 10)] 
  (let [x (* i 2)] 
  x)) ;;=> (0 2 4 6 8 10 12 14 16 18)
Run Code Online (Sandbox Code Playgroud)

除非与:when(或:while)结合使用时:

(for [i (range 10) 
          :let [x (* i 2)]
          :when (> i 5)] 
      x) ;;=> (12 14 16 18)

(for [i (range 10)] 
  (let [x (* i 2)] 
    (when (> i 5) x))) ;;=> (nil nil nil nil nil nil 12 14 16 18)
Run Code Online (Sandbox Code Playgroud)