我想知道是否有一种方法可以在Clojure上执行时访问线程优先的宏的参数值。 例如:
(def x {:a 1 :b 2})
(-> x
(assoc :a 20) ;; I want the value of x after this step
(assoc :b (:a x))) ;; {:a 20, :b 1}
这引起了我的注意:
(-> x
(assoc :a 20)
((fn [x] (assoc x :b (:a x))))) ;; {:a 20, :b 20}
但是还有其他方法吗?
答案 0 :(得分:10)
您可以使用as->
:
(let [x {:a 1 :b 2}]
(as-> x it
(assoc it :a 20)
(assoc it :b (:a it))))
答案 1 :(得分:1)
除了akond's comment以外,请注意,使用as->
可能会很快使您感到困惑。我建议为这些情况提取顶级函数,或者尝试仅在as->
中使用->
:
(-> something
(process-something)
(as-> $ (do-something $ (very-complicated $)))
(finish-processing))