clojure解构数组成个别参数

SK1*_*76H 1 clojure

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

多插入的结构就是这样的

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

但是我有像这样的矢量数据

[
      {:col1 "d1" :col2 "d2" :col3 "d3"}
      {:col1 "d4" :col2 "d5" :col3 "d6"}
]
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*nce 7

您可以使用apply一个参数列表来调用函数.

> (str "Clo" "jure")
"Clojure"
> (apply str ["Clo" "jure"])
"Clojure"
Run Code Online (Sandbox Code Playgroud)

你的情况,你想申请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))
Run Code Online (Sandbox Code Playgroud)

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

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

(apply
  jdbc/multi-insert!
  db-spec :table_name data)
Run Code Online (Sandbox Code Playgroud)

  • 不需要加入arg列表,`apply`是variadic,只有它的最后一个参数被扩展为列表. (3认同)