Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure将数组分解为单个参数_Clojure - Fatal编程技术网

clojure将数组分解为单个参数

clojure将数组分解为单个参数,clojure,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"} ]

我正在尝试使用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"}
]
然而,我有这样一个向量中的数据

(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"}
]
如何分解数组并将内容作为单个参数传递?

您可以使用参数列表调用函数

> (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))
我们只是使用创建参数列表,然后将其传递给apply

正如Alex指出的,apply的签名实际上允许您首先传递内联参数,只要最后一个参数是列表。你可以不用conj重写这个例子

可以使用调用具有参数列表的函数

> (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))
我们只是使用创建参数列表,然后将其传递给apply

正如Alex指出的,apply的签名实际上允许您首先传递内联参数,只要最后一个参数是列表。你可以不用conj重写这个例子


不需要合并到arg列表中,apply是可变的,只有最后一个参数扩展为列表。不需要合并到arg列表中,apply是可变的,只有最后一个参数扩展为列表。