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