Clojure中箭头和双箭头宏之间的区别

时间:2013-10-11 13:08:49

标签: clojure

Clojure中的->->>宏之间有什么区别?

1 个答案:

答案 0 :(得分:70)

文件A.韦伯联系到解释“什么”,但没有做好“为什么”。

通常,当函数对单个主题起作用时,该主题是第一个参数(例如,conjassoc)。当函数对序列主题起作用时,该主题是最后一个参数(例如,mapfilter)。

因此,->->>被记录为分别对第一个和最后一个参数进行线程化,但将它们视为分别应用于单个或顺序参数也很有用。

例如,我们可以将向量视为单个对象:

(-> [1 2 3]
  (conj 4)         ; (conj [1 2 3] 4)
  (conj 5)         ; (conj [1 2 3 4] 5)
  (assoc 0 0))     ; (assoc [1 2 3 4 5] 0 0)
=> [0 2 3 4 5]

或者我们可以将其视为一个序列:

(->> [1 2 3]   
  (map inc)        ; (map inc [1 2 3])
  (map inc)        ; (map inc (2 3 4))
  (concat [0 2]))  ; (concat [0 2] (3 4 5))
=> (0 2 3 4 5)