我惊讶没有人提到 as->
是为在 ->
中使用而设计的(所有链式宏都是为在 ->
中使用而设计的)。在阅读其他人的回答时,这是我期待的
(-> 2
(+ 1)
(as-> x (* 2 x)) ; or just (->> (* 2))
(range))
(-> thing
(->> (fn2 bleh)) ; or (as-> x (fn2 bleh x))
(fn3 blah))
正如您所看到的,as->
的参数顺序——expr 符号 body——非常适合链式,但在这两种情况下,您可以直接从 ->
缝入 ->>
,以在表达式的末尾获得链式值。
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))