我正在开发一个 clojure 函数,它接受可变数量的参数,并将这些参数传递给 java 方法调用
(defn foo [var1 var2 & vars]
(let [bar (.foo var1)]
(.gaz bar var2 vars)))
当 vars 为空时,这有效,但是当我在 vars 中放入一些东西时,我得到 p>
java.lang.ClassCastException: Cannot cast clojure.lang.ArraySeq to [Ljava.lang.Object;
似乎变量没有被拼接/插入到方法调用的变量参数列表中。我怎样才能做到这一点?我想用它作为两者
(foo a b)
和
(foo a b c d e f)
并让它调用
(.gaz bar b c d e f) ;; <- note the list is embedded
最佳答案
请注意,这将返回您的错误消息所要求的类型:
user> (into-array Object [1 2 3])
#<Object[] [Ljava.lang.Object;@571bc284>
从上下文来看,我认为 .gaz
可能是可变参数。如果是这样,您所需要的只是以下内容:
(.gaz bar var2(数组对象变量))
关于java - Clojure:如何将 Varargs 扩展为 Java 方法的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955489/