程序在 repl 中工作但无处可寻?
Program working in repl but nowhere else?
我怀疑这可能与 java-interop 有点相关,因为我在代码中调用了很多 java 功能。
当我 运行 在我的 REPL 中(通过 emacs)执行以下操作时,它可以正常工作
(def height 100)
(def image (BufferedImage. width height BufferedImage/TYPE_INT_ARGB))
(def graphics (.createGraphics image))
(.setColor graphics Color/black)
(for [x (range 0 width 10)]
(.drawLine graphics x 0 x height ))
(for [y (range 0 height 10)]
(.drawLine graphics 0 y width y))
(ImageIO/write image "png" (io/file "output.png"))
正确生成网格图像。
但是,如果我按 C-c C-k,它会生成一个空白图像。
现在,当我将它粘贴到函数中并通过 lein run
运行 时,我收到一条我不明白的警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by clojure.lang.InjectedInvoker/1832669781 (file:/home/n/.m2/repository/org/clojure/clojure/1.10.0/clojure-1.10.0.jar) to method sun.java2d.SunGraphics2D.setColor(java.awt.Color)
WARNING: Please consider reporting this to the maintainers of clojure.lang.InjectedInvoker/1832669781
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
我对 clojure 知之甚少 java,但我正在 运行ning openjdk 10.
我认为我的代码编写正确(尽管很差),这是我的代码的问题还是 clojure?
我怀疑你遇到的问题是“for”并没有按照你的想法去做。它生成一个惰性序列。在 REPL 中,打印机通常会评估这些,但独立代码不会。
尝试用 doseq 替换 for。这将急切地执行你的副作用,应该会改善问题。
非法访问警告是转移注意力的问题。自从 Java 模块系统出现以来,有一些特定的互操作模式可以生成它们。 https://clojure.org/guides/faq#illegal_access
的 Clojure 常见问题解答中提供了如何解决警告的详细信息
我怀疑这可能与 java-interop 有点相关,因为我在代码中调用了很多 java 功能。
当我 运行 在我的 REPL 中(通过 emacs)执行以下操作时,它可以正常工作
(def height 100)
(def image (BufferedImage. width height BufferedImage/TYPE_INT_ARGB))
(def graphics (.createGraphics image))
(.setColor graphics Color/black)
(for [x (range 0 width 10)]
(.drawLine graphics x 0 x height ))
(for [y (range 0 height 10)]
(.drawLine graphics 0 y width y))
(ImageIO/write image "png" (io/file "output.png"))
正确生成网格图像。
但是,如果我按 C-c C-k,它会生成一个空白图像。
现在,当我将它粘贴到函数中并通过 lein run
运行 时,我收到一条我不明白的警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by clojure.lang.InjectedInvoker/1832669781 (file:/home/n/.m2/repository/org/clojure/clojure/1.10.0/clojure-1.10.0.jar) to method sun.java2d.SunGraphics2D.setColor(java.awt.Color)
WARNING: Please consider reporting this to the maintainers of clojure.lang.InjectedInvoker/1832669781
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
我对 clojure 知之甚少 java,但我正在 运行ning openjdk 10.
我认为我的代码编写正确(尽管很差),这是我的代码的问题还是 clojure?
我怀疑你遇到的问题是“for”并没有按照你的想法去做。它生成一个惰性序列。在 REPL 中,打印机通常会评估这些,但独立代码不会。
尝试用 doseq 替换 for。这将急切地执行你的副作用,应该会改善问题。
非法访问警告是转移注意力的问题。自从 Java 模块系统出现以来,有一些特定的互操作模式可以生成它们。 https://clojure.org/guides/faq#illegal_access
的 Clojure 常见问题解答中提供了如何解决警告的详细信息