令人惊讶的是,没有人提到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))