【发布时间】:2015-11-16 23:36:56
【问题描述】:
-> 和 ->> 宏只是为了使代码更具可读性还是还有其他特定功能?
【问题讨论】:
-> 和 ->> 宏只是为了使代码更具可读性还是还有其他特定功能?
【问题讨论】:
线程优先 (->) 和线程后 (->>) 可以使代码更具可读性。但这已经很重要了!
它允许取消嵌套函数调用(示例取自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)
它还可以让你把重点放在某事上。例如,考虑:
(-> {... }
...
...
(count))
(count (...(... {...})))
在第一个例子中,很明显你从一张地图开始,然后对它做一些事情。在第二个中,很明显你在数一些东西。
偏好取决于您要提出的内容。
此外,-> 与 ->> 的选择是一个清晰的视觉指标:您是否在收藏品上运营?这很明显(这是 Clojure 中将集合作为最后一个参数的约定)。
所以是的,它是“唯一的”可读性,但这是构建程序的一个非常重要的部分,Clojure 为您提供了使您的代码自然阅读的工具。在选择一种解决方案时,我会尽量考虑the way Clojure will be read。
【讨论】:
some-> 和 some->> 线程第一个和最后一个如上所述,但如果任何步骤返回 nil,则停止评估,这可能是单子。 cond-> 和 cond->> 测试一个条件来决定是否通过每个线程表单传递值。
.replace.toUpperCase)调用java方法与clojure库之间有什么区别或好处:(clojure.string/replace)(clojure.string/upper-case)?
doto 宏感兴趣。