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