Я оборачиваю java-библиотеку в clojure, но у меня проблемы с аргументами переменной длины. Сказать,
TestClass.aStaticFunction(Integer... intList){/*....*/}
Как я могу вызвать эту функцию в clojure?
Я оборачиваю java-библиотеку в clojure, но у меня проблемы с аргументами переменной длины. Сказать,
TestClass.aStaticFunction(Integer... intList){/*....*/}
Как я могу вызвать эту функцию в clojure?
Поскольку переменные в Java являются фактически массивами, вы можете вызывать функции с переменными аргументами в Clojure. путем передачи массива.
Вы можете преобразовать последовательность Clojure (возможно, используя различные функции Clojure с переменными аргументами) в массив:
(TestClass/aStaticFunction (into-array Integer [(int 1),(int 2)]))
or
(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)))
Integer/TYPE
создаст примитивный массив, что, вероятно, не то, что здесь нужно... подозреваю, что вам нужен только Integer
.
- person mikera; 28.07.2012
Аргументы переменной длины Java на самом деле требуют массив в качестве входных данных.
Итак, в Clojure вызов должен быть примерно таким:
(TestClass/aStaticFunction (into-array Integer some-sequence-of-integers))
(TestClass/aStaticFunction (to-array '(1 2 3 4 5)))
Например,
(java.util.Arrays/asList (to-array '(1 2 3 4 5)))