Clojure 尝试动态创建地图

Clojure 尝试动态创建地图,clojure,Clojure,我想知道,为什么会坠机 (defn test1 [var1 & var2] (print (json/write-str (merge {:key1 var1} var2)))) (defn -main [& args] (test1 "val1" {:key2 "val2" :key3 "val3"})) 错误是: Exception in thread "main" java.lang.ClassCastException: clojure.lang.Persis

我想知道,为什么会坠机

(defn test1 [var1 & var2]
  (print (json/write-str (merge {:key1 var1} var2))))

(defn -main [& args]
  (test1 "val1" {:key2 "val2" :key3 "val3"}))
错误是:

Exception in thread "main" java.lang.ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.util.Map$Entry,  

您的参数
var2
实际上包含(它位于
字符之后)。因此它实际上包含
var1
之后的所有参数。您可以通过删除
&
来修复代码,但是您只能指定一个
var2
参数:

(defn test1 [var1 var2]
  (print (json/write-str (merge {:key1 var1} var2))))
如果希望能够以
var2
的形式传递多个映射,首先必须将它们合并到一个映射中:

(defn test1 [var1 & var2]
  (print (json/write-str (merge {:key1 var1} 
                                (apply merge var2)))))

这里不需要两个
merge
调用,
(apply merge{:key1 var1}var2)
应该完成这项工作。
into
可以用来代替
merge
,fwiw。