正确编写具有命名符号的宏
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 持有的符号只是在扩展中给出了一个绑定,并在该绑定的上下文中为自由对象调用求值。
以下代码的问题是多重评估:
(defmacro with-object (name &body body)
`(let ((,name (create-object)))
,@body
(free-object ,name)))
但我不知道如何以正确的方式做到这一点。
为了在您的代码中的 let 绑定中使用名称,它必须包含一个符号。您提供的代码中不应该存在多重求值问题,因为 name 持有的符号只是在扩展中给出了一个绑定,并在该绑定的上下文中为自由对象调用求值。