我惊讶没有人提到,as->
是设计用来在->
中使用的(所有threading宏都是在->
中工作的)。在阅读其他人的答案后,这是我预期的:
(-> 2
(+ 1)
(as-> x (* 2 x)) ; or just (->> (* 2))
(range))
(-> thing
(->> (fn2 bleh)) ; or (as-> x (fn2 bleh x))
(fn3 blah))
如您所见,as->
的参数顺序(expr 标识符号体)有利于线程化,但在这两种情况下,您只需从 ->
线程到 ->>
,就可以将线程化值放在表单的末尾。
当您有一个或两个位于通常线性线程中的表单,且不想让线程化值位于开始或结束时,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))