Какой самый идиоматичный способ передачи векторов для var-args в clojure? - PullRequest
8 голосов
/ 01 июля 2010

Предположим, у меня есть вектор пар ключ-значение, которые я хочу поместить в карту.

(def v [k1 v1 k2 v2])

Я делаю такие вещи:

(apply assoc (cons my-map v))

И на самом деле, я обнаружил, что делаю этот паттерн,

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

несколько раз за последние пару дней. Это идиоматично, или есть более хороший способ переместить последовательности форм аргументов в функции?

1 Ответ

10 голосов
/ 01 июля 2010

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...