Clojure问号箭头宏

dal*_*ier 1 macros clojure

我在一些代码中遇到了?>一个->我试图理解的代码.我搜查了clojuredocs,但是空白了.这是做什么的?

代码我试图理解:

(-> (apply time/t -2 date-fields)
             (?> (:grain token-fields) (assoc :grain (:grain token-fields)))
             (?> (:timezone token-fields) (assoc :timezone (:timezone token-fields))))
Run Code Online (Sandbox Code Playgroud)

Mic*_*ohl 6

我找到了.它来自Plumbing库.

引用文档:

?> macro
(?> arg do-it? & rest)
Conditional single-arrow operation (-> m (?> add-kv? (assoc :k :v)))
Run Code Online (Sandbox Code Playgroud)

这是宏的实际源代码:

(defmacro ?>
  "Conditional single-arrow operation (-> m (?> add-kv? (assoc :k :v)))"
  [arg do-it? & rest]
  `(if ~do-it?
     (-> ~arg ~@rest)
     ~arg))
Run Code Online (Sandbox Code Playgroud)