我是编码新手。我的第一个语言是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
核心clj: https://github.com/harununal/clj-x-ray-coloring/tree/master/src/img_process
答案 0 :(得分:1)
如果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]))
请注意,lein检查不是编译器,它相当于轻型短绒棉衣的lein等效项,也许可以检查这些警告和其他警告。