我在尝试在宏函数中创建一个原子并在宏输出形式中嵌入对该原子的引用。
(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。这里的问题是什么?