【问题标题】:accessing Clojure's thread-first macro arguments访问 Clojure 的线程优先宏参数
【发布时间】:2019-06-09 08:01:22
【问题描述】:

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

但是还有其他方法可以做到吗?

【问题讨论】:

    标签: clojure functional-programming


    【解决方案1】:

    你可以使用as->:

    (let [x {:a 1 :b 2}]
        (as-> x it
            (assoc it :a 20)                                             
            (assoc it :b (:a it)))) 
    

    【讨论】:

    【解决方案2】:

    除了akond's comment,请注意,使用as-> 很快就会变得非常混乱。我建议为这些情况提取顶级函数,或者尝试仅在 -> 中使用 as->

    (-> something
        (process-something)
        (as-> $ (do-something $ (very-complicated $)))
        (finish-processing))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多