後で実行できる Java オブジェクト (この場合は BufferedImage) を Clojure コードに埋め込みたいと考えています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)))