代码之家  ›  专栏  ›  技术社区  ›  Rob Lachlan

Clojure中的var参数最惯用的传递向量的方法是什么?

  •  8
  • Rob Lachlan  · 技术社区  · 14 年前

    假设我有一个键值对的向量,我想把它放到一个映射中。

    (def v [k1 v1 k2 v2])
    

    我做这种事:

    (apply assoc (cons my-map v))
    

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

    (apply some-function (cons some-value some-seq))
    

    在过去的几天里。这是惯用的,还是有更好的方法将参数从序列移动到函数中?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Brian Carper    14 年前

    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]