clojure解构数组成个别参数

时间:2016-07-08 16:26:43

标签: clojure

我正在尝试使用clojure.java.jdbc进行多插入

多插入的结构是这样的

(jdbc/multi-insert! db-spec :table_name 
  {:col1 "d1" :col2 "d2" :col3 "d3"}
  {:col1 "d4" :col2 "d5" :col3 "d6"}...)

但是我有像这样的载体中的数据

[
      {:col1 "d1" :col2 "d2" :col3 "d3"}
      {:col1 "d4" :col2 "d5" :col3 "d6"}
]

如何构造数组并将内容作为单独的参数传递?

1 个答案:

答案 0 :(得分:7)

您可以使用apply来调用带有参数列表的函数。

> (str "Clo" "jure")
"Clojure"
> (apply str ["Clo" "jure"])
"Clojure"

在您的情况下,您希望将jdbc/multi-insert!与包含db-spec:table_name的列表以及现有向量中的所有地图一起应用。

(def data [{:col1 "d1" :col2 "d2" :col3 "d3"}
           {:col1 "d4" :col2 "d5" :col3 "d6"}])

(apply
  jdbc/multi-insert!
  (conj [db-spec :table_name] data))

我们只是使用conj创建参数列表,然后将其传递给apply

正如Alex指出的那样,apply的签名实际上允许您首先传递内联参数,只要最终参数是一个列表。您可以在不使用conj的情况下重写该示例。

(apply
  jdbc/multi-insert!
  db-spec :table_name data)