正确编写具有命名符号的宏

Writing a macro that has a named symbol correctly

以下代码的问题是多重评估:

(defmacro with-object (name &body body)
  `(let ((,name (create-object)))
     ,@body
     (free-object ,name)))

但我不知道如何以正确的方式做到这一点。

为了在您的代码中的 let 绑定中使用名称,它必须包含一个符号。您提供的代码中不应该存在多重求值问题,因为 name 持有的符号只是在扩展中给出了一个绑定,并在该绑定的上下文中为自由对象调用求值。