首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序可以在repl中运行,但不能在其他地方运行?

程序可以在repl中运行,但不能在其他地方运行?
EN

Stack Overflow用户
提问于 2019-03-07 14:28:47
回答 1查看 119关注 0票数 0

我怀疑这可能与java-interop有关,因为我在代码中调用了很多java功能。

当我在我的REPL中运行以下代码(通过emacs)时,它完全按照它应该的方式工作

代码语言:javascript
复制
  (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运行它时,我得到了一个我不理解的警告:

代码语言:javascript
复制
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更是知之甚少,但我使用的是openjdk 10。

我相信我的代码是正确编写的(尽管写得很差),这是我的代码的问题还是clojure的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 15:47:23

我怀疑你的问题是“for”并没有像你想的那样做。它会生成一个惰性序列。在REPL中,打印机通常会评估这些参数,但独立代码不会。

尝试将for替换为doseq。这将急切地执行您的副作用,并应改善问题。

非法访问警告是在转移视线。自从Java模块系统出现以来,就有一些特定的互操作模式生成它们。有关如何解决警告的详细信息,请参阅https://clojure.org/guides/faq#illegal_access上的Clojure FAQ

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55037376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档