Clojure's: класс gen и двойные массивы
Я пытаюсь:gen-класс fn, который принимает двумерный массив значений Double в качестве входных данных. Я уже видел сообщение и решение здесь, относящиеся к аналогичной теме, но я все еще не могу найти рабочее решение.
(ns gui.heatmap
(:gen-class
:name gui.Heatmap
:methods [[heat-map2 ["[[D"] org.jfree.chart.JFreeChart]]))
(defn foo [dbl-array]
...)
Я использую "[[D"
основанный на использовании type
на моем входе. Это прекрасно компилируется в файл.class.
Теперь, когда я перехожу в другой файл.clj, у меня есть следующее.
(ns ...
(import (gui.Heatmap)))
(defn bar [args]
...
(.foo
(into-array
(vector
(double-array <list of numbers>)
(double-array <list of numbers>)
(double-array <list of numbers>)))))
Когда я звоню bar
из ответа я получаю следующую ошибку:
java.lang.IllegalArgumentException: не найдено подходящего поля: heat_map2 для класса [[D
Какие-нибудь мысли?
2 ответа
Вы упускаете объект. (.foo (into-array ...))
против (.foo (Heatmap.) (into-array...))
Обратите внимание, вы также должны require
ваш gui.Heatmap
Пространство имен. В противном случае вы можете попасть в беду, если ...
пространство имен компилируется до gui.Heatmap
, Тогда импорт завершится неудачно, потому что класс еще не сгенерирован. Добавление require
решит эту проблему.
Редактировать:
Чтобы уточнить вещи.
- исправить пропущенный объект
- добавить требуется
- исправить префикс (хороший улов by dbyrne!)
- исправить: предложение импорта (также было неправильно)
(ns gui.heatmap
(:gen-class
:name gui.Heatmap
:methods [[heat-map2 ["[[D"] org.jfree.chart.JFreeChart]]))
(defn -foo [dbl-array]
...)
(ns ...
(import gui.Heatmap))
(defn bar [args]
...
(.foo
(Heatmap.)
(into-array
(vector
(double-array )
(double-array )
(double-array )))))
Ответ Котарака хорош. Однако другая проблема заключается в том, что вам нужно назвать свою функцию -foo
вместо foo
, Либо это, либо изменить :prefix
внутри :gen-class
,