gpt4 book ai didi

clojure - 在 Clojure 代码中嵌入任意对象

转载 作者:行者123 更新时间:2023-12-04 19:14:58 25 4
gpt4 key购买 nike

我想在 Clojure 代码中嵌入一个 Java 对象(在本例中为 BufferedImage),它可以是 eval d 以后。

创建代码工作正常:

(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)))

最佳答案

我猜您需要在编译时编写一个宏来获取对象(或创建所需对象的方法),以二进制格式(字节数组)序列化该对象,并且宏的输出应该是 - 一个引用的符号到字节数组和一个函数,该函数可用于通过反序列化从序列化数据中获取对象。

关于clojure - 在 Clojure 代码中嵌入任意对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10735701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com