我在一些代码中遇到了?>一个->我试图理解的代码.我搜查了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)
我找到了.它来自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)