Clojure:如何将Varargs扩展为Java方法列表

时间:2014-09-21 03:24:09

标签: java clojure variadic-functions

我正在研究一个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

1 个答案:

答案 0 :(得分:4)

请注意,这会返回错误消息要求的类型:

user> (into-array Object [1 2 3])
#<Object[] [Ljava.lang.Object;@571bc284>

从上下文来看,我认为.gaz可能是varargs。如果是这样,您只需要以下内容:

(.gaz bar var2 (into-array Object vars))