Я хотел бы встроить код Clojure в Java. Этот сайт был полезен в основах установки этого, но единственный аргумент, который это когда-либо передает, имеет Строку типа. Я попытался использовать ints также, и они также работают.
Мой вопрос состоит в том, существует ли некоторый отформатированный способ передать в структурированных данных Clojure. В частности, у меня есть список точек, которые я хотел бы передать Clojure и превратиться в вектор, который будет выглядеть примерно так:
[[1 2] [3 4] [5 6]]
Что самый легкий путь состоит в том, чтобы пойти о выполнении этого? Там предварительно обрабатывает, я могу сделать на конце Java, или я должен сделать постобработку на конце Clojure или являюсь там чем-то в Clojure, который обработает это? Я подозреваю, что это является передающим в Строке чисел и длине каждого кортежа к Clojure и разрешении этому обработать Строку в вектор. Однако этот аспект Clojure не имеет многих примеров, и мне любопытно, если я пропускаю что-то очевидное.
Править: Посмотрите на ответ mikera, Вы интересуетесь мимоходом Объектами Java. Посмотрите на мой ответ ниже, если Вы просто хотите отформатировать свои данные заранее в формат Clojure для набора/карты/и т.д.
Это немного зависит от того, в каком формате находятся ваши данные, но вам может показаться, что проще всего просто передать объект Java, представляющий данные, и прочитать его, используя функции взаимодействия Clojure с Java.
например. вы можете передать массив точек Java напрямую и сделать что-то вроде:
(let [point (aget some-array index)]
(do-stuff-with-point point))
В тех случаях, когда вы хотите передать простую структуру данных, которую вы уже отформатировали, чтобы она выглядела как Clojure в Java, вы можете передать этот аргумент в виде строки. Поэтому для примера, который я привел в своем вопросе, я бы передал
"[[1 2] [3 4] [5 6]]"
в качестве аргумента. Когда вы вызвали Clojure с помощью invoke (arg), вы можете сделать первым шагом вашей функции вызов readString для вашего arg:
(defn foo [d]
(def data (read-string d)))
Вышеупомянутое приведет к созданию вектора при передаче примера String.