Clojure Can';无法识别javax.imageio.imageio的读取方法?
我得到:Clojure Can';无法识别javax.imageio.imageio的读取方法?,clojure,Clojure,我得到: (ns pdf-try.core (:use clj-pdf.core)
(ns pdf-try.core
(:use clj-pdf.core)
(:require clojure.java.io))
(defn gen-pdf []
(let [superman (javax.imageio.ImageIO/read "sample_logos/batman.jpeg")
batman (javax.imageio.ImageIO/read "sample_logos/superman.jpeg")]
(println (new java.util.Date))
(pdf [{} (for [i (range 80000)]
(do [:paragraph
[:image superman]
[:image batman]]))] "super.pdf")
(println (new java.util.Date))))
(defn -main
"I don't do a whole lot."
[& args]
(println "Hello, World!")
(gen-pdf))
因为类中没有接受字符串作为参数的静态读取方法。使用该路径创建一个文件,并将该文件作为参数传递
Exception in thread "main" java.lang.IllegalArgumentException: No matching method found: read
What am I missing here ?
而且,您错误地从Clojure调用Java类构造函数。您需要使用like
(Classname.args*)
从Clojure调用Java类构造函数。有关详细信息,请查看Oh。。!我看到了这个。这就是为什么我没有怀疑!我刚刚发现我把蝙蝠侠的形象和超人的不匹配!粉丝们会生气的@AmoghtalPalikar和,纠正了您的一些错误实际上(new java.util.Date)
是完全正确的。事实上,在宏扩展过程中,(java.util.Date.)将重写到该代码。不过,使用虚线形式确实更为惯用。(从某种意义上说,这是人们在相似的上下文中倾向于使用的。new
在用户代码中仍然经常使用,因为它比宏中的“拖尾点”方便得多。)至于它的价值,我不同意使用点形式而不是new
更惯用。总之,new
既易于阅读(比单词末尾的一个小点更突出),又不会在编译器级别将符号名称与其用途混为一谈。@NathanDavis:否决投票的原因是什么?
(defn gen-pdf []
(let [superman (javax.imageio.ImageIO/read "sample_logos/batman.jpeg")
batman (javax.imageio.ImageIO/read (java.io.File. "sample_logos/superman.jpeg"))]
(println (java.util.Date.))
(pdf [{} (for [i (range 80000)]
(do [:paragraph
[:image superman]
[:image batman]]))] "super.pdf")
(println (java.util.Date.))))