在clojure中为var-args传递向量的最惯用的方法是什么?

时间:2010-07-01 18:54:44

标签: clojure

假设我有一个键值对矢量,我想将它放入地图中。

(def v [k1 v1 k2 v2])

我做这件事:

(apply assoc (cons my-map v))

事实上,我发现自己正在做这种模式,

(apply some-function (cons some-value some-seq))
在过去的几天里几次。这是惯用的,还是有一种更好的方法将参数形式序列移动到函数中?

1 个答案:

答案 0 :(得分: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.

这就是args*的含义。所以你可以这样做:

user> (apply assoc {} :foo :bar [:baz :quux])
{:baz :quux, :foo :bar}
user> (apply conj [] :foo :bar [:baz :quux])
[:foo :bar :baz :quux]