Clojure中的箭头和双箭头macros的区别

Clojure中的->->>macros有什么区别?

A. Webb的文档解释了“什么”,但没有做好“为什么”。

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

因此, ->->>分别logging为第一个和最后一个参数,但也可以将它们分别应用于单数或连续的参数。

例如,我们可以把vector看作是一个单一的对象:

 (-> [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)