假设我有一个键值对向量,我想将它放入一个映射中.
(def v [k1 v1 k2 v2])
Run Code Online (Sandbox Code Playgroud)
我做这件事:
(apply assoc (cons my-map v))
Run Code Online (Sandbox Code Playgroud)
事实上,我发现自己正在做这种模式,
(apply some-function (cons some-value some-seq))
Run Code Online (Sandbox Code Playgroud)
在过去的几天里好几次.这是惯用的,还是有更好的方法将参数形式序列移动到函数中?
Bri*_*per 10
apply 在函数名和最后一个seq参数之间需要额外的参数.
user> (doc apply)
-------------------------
clojure.core/apply
([f args* argseq])
Applies fn f to the argument list formed by prepending args to argseq.
Run Code Online (Sandbox Code Playgroud)
这args*意味着什么.所以你可以这样做:
user> (apply assoc {} :foo :bar [:baz :quux])
{:baz :quux, :foo :bar}
user> (apply conj [] :foo :bar [:baz :quux])
[:foo :bar :baz :quux]
Run Code Online (Sandbox Code Playgroud)