我很惊讶没有人提到,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 symbol body有利于threading,但在这两种情况下,您都可以简单地从->
thread到->>
,使threaded的值位于表单的最后。
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))