我正在研究一个clojure函数,它接受可变数量的参数,并将它们传递给java方法调用
(defn foo [var1 var2 & vars]
(let [bar (.foo var1)]
(.gaz bar var2 vars)))
当vars为空时这是有效的,但当我把东西放在vars中时,我得到了
java.lang.ClassCastException: Cannot cast clojure.lang.ArraySeq to [Ljava.lang.Object;
似乎vars没有被拼接/插入到方法调用的vararg列表中。我怎样才能做到这一点?我想将此作为两者使用
(foo a b)
和
(foo a b c d e f)
让它打电话
(.gaz bar b c d e f) ;; <- note the list is embedded
答案 0 :(得分:4)
请注意,这会返回错误消息要求的类型:
user> (into-array Object [1 2 3])
#<Object[] [Ljava.lang.Object;@571bc284>
从上下文来看,我认为.gaz
可能是varargs。如果是这样,您只需要以下内容:
(.gaz bar var2 (into-array Object vars))