宏 - > - >>在Clojure中

4 macros clojure

->->>宏才使代码更易读或他们还有其他特殊功能?

nha*_*nha 7

thread-first(->)和thread-last(->>)用于使代码更具可读性.但那已经非常重要了!

它允许取消嵌套函数调用(例如取自clojuredocs):

;; Arguably a bit cumbersome to read:
user=> (first (.split (.replace (.toUpperCase "a b c d") "A" "X") " "))
"X"

;; Perhaps easier to read:
user=> (-> "a b c d" 
           .toUpperCase 
           (.replace "A" "X") 
           (.split " ") 
           first)
Run Code Online (Sandbox Code Playgroud)

它还允许您强调某些东西.例如,考虑:

(-> {... }
    ...
    ...
    (count)) 

(count (...(... {...})))
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,很明显您从一个地图开始,然后对它做一些事情.在第二个中,很明显你算了一些东西.

偏好取决于您想要提出的内容.

此外,->vs 的选择->>是一个明确的视觉指示:你是否在收藏品上运作?这很明显(这是Clojure中的一个约定,将集合作为最后一个参数).

所以是的,它是"唯一的"可读性,但这是构建程序的一个非常重要的部分,Clojure为您提供了自然地读取代码的工具.在选择一种解决方案时,我会尝试考虑Clojure的读取方式.

  • 还值得注意的是,有一系列相关的条件线程宏**会*在其上添加额外的功能.`some->`和`some - >>`首先如上所述,最后如上所述,但如果任何步骤返回`nil`,则停止评估,可能是monad.`cond->`和`cond - >>`测试一个条件来决定是否通过每个线程形式传递值. (2认同)