我尝试在宏函数中创建一个原子并在宏输出形式中嵌入对其的引用
(defmacro x []
(let [a (atom {})]
`(fn []
~a)))
使用此宏尝试会导致此错误
`
(x)
Syntax error compiling fn* at (/tmp/form-init15982565344292085756.clj:1:1).
Can't embed object in code, maybe print-dup not defined: clojure.lang.Atom@350e9f50
`
我尝试定义一个空的 print-dup
覆载,但却产生了不同的错误
`
(defmethod print-dup clojure.lang.Atom [x w])
(x)
Syntax error compiling fn* at (/tmp/form-init15982565344292085756.clj:1:1).
Can't embed unreadable object in code: clojure.lang.Atom@5f3623b3
`
由于 Clojure 有 eval,我预计这会工作,这里有什么问题呢?