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,

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