我惊讶没有人提到 as->
是设计成在 ->
(所有的 threading 宏都可以在 ->
中工作)内部使用的。在阅读其他人的回答后,这是我所期待的:
(-> 2
(+ 1)
(as-> x (* 2 x)) ; or just (->> (* 2))
(range))
(-> thing
(->> (fn2 bleh)) ; or (as-> x (fn2 bleh x))
(fn3 blah))
如您所见,as->
的参数顺序(即表达式符号体)有利于线程化,但在这两种情况下,您可以从->
简单线程到->>
,这样线程值就会被放在表单的末尾。
当您在一条直线线程中只使用一个或两个表单,并且不想在开头或末尾使用线程值时,as->
表现得特别出色。
(-> thing
(fn1 arg2 arg3)
(+ 13)
(as-> q (fn2 arg1 q arg3))
(fn3 second-arg))
或者,也许,您需要一个用于解构或什么的let
。
(-> foo
(processs-it :expand)
(as-> m (let [{:keys [start end]} m]
(- end start)))
(categorize-interval))