Clojure中的->
和宏有什么区别?->>
问问题
6589 次
1 回答
88
文档 A. Webb 链接以解释“什么”,但没有做好“为什么”的工作。
通常,当函数作用于单个主题时,该主题是第一个参数(例如conj
,, assoc
)。当函数作用于序列主题时,该主题是最后一个参数(例如map
,, filter
)。
因此,->
和->>
分别记录为第一个和最后一个参数的线程,但将它们分别应用于单数或连续参数也很有用。
例如,我们可以将向量视为奇异对象:
(-> [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)
于 2013-10-11T13:23:42.950 回答