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。