Предупреждение об отражении - ошибка методов Java на Clojure / Leiningen - PullRequest
1 голос
/ 02 июня 2019

Я новичок в кодировании. Мой первый язык - Clojure. И это мой первый вопрос по stackoverflow.

Я написал код Clj, протестировал все функции на lein (Emacs / Cider) и хочу скомпилировать для тестирования. Но методы Java вернули это сообщение об ошибке:

(на терминале в папке проекта):

aaron@debian:~/img-process$ lein check

Reflection warning, img_process/core.clj:25:30 - reference to field getWidth can't be resolved.

(и getHeight, getRGB, setRGB, java.io.File, javax.imeageio.ImageIO, java.lang.String)

Почему lein не видит элементы Java? Как я могу скомпилировать это?

Спасибо.

project.clj https://github.com/harununal/clj-x-ray-coloring/blob/master/project.clj

core clj: https://github.com/harununal/clj-x-ray-coloring/tree/master/src/img_process

1 Ответ

1 голос
/ 02 июня 2019

Если Clojure не может подразумевать тип объекта Java, он возвращается к отражению для взаимодействия, которое намного медленнее.Если вы используете:

(set! *warn-on-reflection* true)

, то вы увидите эти предупреждения и в REPL.Если вы напишите подсказку своим методам, то Clojure сможет видеть типы и генерировать гораздо лучший код.например,

(defn get-img-coords
  [^BufferedImage img]
  (for [y (range (.getHeight img))
        x (range (.getWidth img))]
    [x y]))

Обратите внимание, что проверка лейн не является компилятором - это эквивалент лейнтера светлого линтера, возможно, для проверки этих предупреждений и других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...