Clojure - конвертировать список в массив Java

Есть ли какой-то идиоматический способ преобразования списка Clojure в массив Java, кроме как сначала преобразовать его в векторный и использовать в массив (значит, что-то кроме (into-array (vec my-list)), как я не хочу дополнительных накладных расходов)?

2 ответа

Решение

Ваш вопрос, кажется, основан на ложной предпосылке. в массив не нужно брать вектор, он принимает значение, которое можно секвировать. Документация ( http://clojuredocs.org/clojure_core/clojure.core/into-array) содержит примеры использования into-array для не векторной последовательности:

user=> (into-array (range 4))
#<Integer[] [Ljava.lang.Integer;@63d6dc46>

user=> (type (range 4))
clojure.lang.LazySeq

user=> (doc range)
-------------------------
clojure.core/range
([] [end] [start end] [start end step])
  Returns a lazy seq of nums from start (inclusive) to end
  (exclusive), by step, where start defaults to 0, step to 1, and end
  to infinity.

Вызов его в списке работает так же хорошо:

user=> (into-array (list 1 2 3))
#<Long[] [Ljava.lang.Long;@138297fe>

Поскольку мне нужно было конкретно целочисленный массив, я использовал int-array функция, которая принимает список в качестве параметра.

Другие вопросы по тегам