42

我正在将一个 java lib 包装到 clojure 中,但是我在处理可变长度参数时遇到了问题。说,

TestClass.aStaticFunction(Integer... intList){/*....*/}

我怎么能在clojure中调用这个函数?

4

3 回答 3

57

由于 Java 可变参数实际上是数组,因此您可以通过传递数组在 Clojure 中调用可变参数函数。

您可以将 Clojure seq(也许通过使用 Clojure 的各种可变参数函数)转换为数组:

 (TestClass/aStaticFunction (into-array Integer [(int 1),(int 2)]))

或者

(defn a-static-function-wrapper [& args]
  (TestClass/aStaticFunction (into-array Integer args))

或者制作一个数组并手动设置它的索引

(TestClass/aStaticFunction (doto (make-array Integer 3)
                              (aset 0 first-element)
                              (aset 1 second-element)
                              (aset 2 third-element)))
于 2012-07-28T15:28:16.360 回答
9

Java 可变长度参数实际上需要一个数组作为输入。

所以在 Clojure 中,调用应该是这样的:

(TestClass/aStaticFunction (into-array Integer some-sequence-of-integers))
于 2012-07-28T15:28:35.897 回答
5
(TestClass/aStaticFunction (to-array '(1 2 3 4 5)))

例如

(java.util.Arrays/asList (to-array '(1 2 3 4 5)))
于 2012-07-28T15:39:06.637 回答