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

avl*_*vli 40 clojure

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

Ale*_*art 72

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

通常,当函数对单个主题起作用时,该主题是第一个参数(例如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]
Run Code Online (Sandbox Code Playgroud)

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

(->> [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)
Run Code Online (Sandbox Code Playgroud)

  • 我倾向于认为Clojure函数在它们的第一个参数和第二个参数之间的区别,因为它们与它们是否是高阶函数有关,而不是参数是连续的.`conj`或`assoc`的第一个参数通常是顺序的,就像`map`或`filter`的第二个参数一样.但是,`map`和`filter`都是高阶,并将其功能参数作为第一个参数.因此,以这种方式查看它,` - >>`往往用于链接高阶函数和` - >`否则. (20认同)