Clojure中的->
和->>
宏有什麼區別?Clojure中的箭頭和雙箭頭宏的區別
回答
該文檔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]
或者,我們可以把它看成一個序列:
(->> [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)
我傾向於考慮對它們的第一個和第二個參數進行操作的Clojure函數之間的區別,因爲它們是否是高階函數而不是參數是順序函數。 「conj」或「assoc」的第一個參數通常是連續的,「map」或「filter」的第二個參數也是。然而,'map'和'filter'都是更高階的,並將它們的功能參數作爲第一個參數。所以以這種方式來看待它,' - >>'往往被用於鏈接高階函數,否則''>''>。 – jbm
關於單數和順序參數的觀點對我來說很有意義!我現在也看到,爲什麼我對這些宏感到困惑。問題是我只看到了函數f.e.唯一的參數。 '( - > 42 str)'和'( - >> 42 str)'都返回'「42」'。但是當我瀏覽上面的例子時,對我來說事情是顯而易見的。 – avli
- 1. 雙箭頭CSS
- 2. JavaFX線/箭頭箭頭
- 3. Clojure函數名稱中的箭頭
- 4. Excel vba插入箭頭宏
- 5. 動畫雙箭頭 - CSS
- 6. javascript es6雙箭頭功能
- 7. 點工具雙箭頭
- 8. 箭頭
- 9. 箭頭
- 10. 的箭頭
- 11. 的OpenLayers箭頭
- 12. 多箭頭切換箭頭切換
- 13. CSS盒除箭頭外有箭頭
- 14. C#和箭頭鍵
- 15. CRichEditCtrl和箭頭鍵
- 16. 「Ctrl +左箭頭」和「Ctrl +右箭頭」的八進制代碼
- 17. 用箭頭填充帶有箭頭的svg路徑作爲頭
- 18. Coffeescript類和範圍以及胖箭頭和薄箭頭
- 19. 與箭頭式的
- 20. 箭頭的速度
- 21. 冒號「:」和胖箭頭「>」之間的區別是什麼?
- 22. 這個ES6箭頭函數和常規函數的區別?
- 23. 箭頭函數和bind之間的區別()
- 24. 怪異箭頭
- 25. 用箭頭
- 26. 動畫箭頭
- 27. 箭頭鍵
- 28. CSS箭頭
- 29. shift +箭頭鍵
- 30. 用箭頭
見[Clojure的](HTTP:// clojuredocs。 org/clojure_core/clojure.core/- %3E%3E)[docs](http://clojuredocs.org/clojure_core/clojure.core/-%3E)。 –