我惊讶没有人提到 as->
是为了在 ->
(所有线程宏都可以在 ->
中工作)中使用的。在查看其他人的回答后,这是我的预期:
(-> 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))