我想在 Clojure 代码中嵌入一个 Java 对象(在本例中为 BufferedImage),eval
以后可以使用它。
创建代码工作正常:
(defn f [image]
`(.getRGB ~image 0 0))
=> #'user/f
(f some-buffered-image)
=> (.getRGB #<BufferedImage BufferedImage@5527f4f9: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 256 height = 256 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0> 0 0)
但是,尝试eval
它时会出现异常:
(eval (f some-buffered-image))
=> CompilerException java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: BufferedImage@612dcb8c: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 256 height = 256 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0, compiling:(NO_SOURCE_PATH:1)
有没有办法让这样的工作?
编辑:
我尝试这样做的原因是我希望能够生成从图像中获取样本的代码。图像被传递给执行代码生成的函数(相当于f
上面的),但是(由于各种原因)以后不能作为参数传递给编译的代码。
我需要生成带引号的代码,因为这是一个更大的代码生成库的一部分,它将对生成的代码应用进一步的转换,因此我不能只做类似的事情:
(defn f [image]
(fn [] (.getRGB image 0 0)))