访问Clojure的线程优先宏参数

时间:2019-01-15 10:06:08

标签: clojure functional-programming

我想知道是否有一种方法可以在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}

但是还有其他方法吗?

2 个答案:

答案 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))
相关问题