【问题标题】:What's the most idiomatic way to pass vectors in for var-args in clojure?在clojure中为var-args传递向量的最惯用的方法是什么?
【发布时间】:2010-07-01 18:54:44
【问题描述】:

假设我有一个键值对向量,我想将其放入映射中。

(def v [k1 v1 k2 v2])

我做这样的事情:

(apply assoc (cons my-map v))

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

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

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

    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]
    

    【讨论】:

    • 啊,就是这样。我知道我错过了一些东西。谢谢,布赖恩。
    猜你喜欢
    • 2011-05-04
    • 2013-03-24
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多