有没有办法引用读取器宏的调用?更具体地说,我想创建一个宏,一旦评估,将生成一个 defclass 语句和相应的 XML 文件。这可能吗?

我想过使用 #.( ... ) 阅读器宏,但我认为宏参数不绑定(bind)在阅读器宏中使用。这样对吗?

因此,我的第二个想法是尝试生成一个包含阅读器宏的语句,但我不确定是否有办法做到这一点。

关于在扩展宏调用时生成 XML 文件的任何建议?

提前感谢您的任何想法。

最佳答案

类似的东西:

(defmacro def-wsdl-class (name (&rest supers)
                           (&rest slots)
                           &rest options)
  `(progn
     (eval-when (:compile-toplevel :execute)
       (with-open-file (xml-file (make-pathname :name (string-capitalize name)
                                                :type "wsdl"
                                                :defaults (or *compile-pathname*
                                                              *load-pathname*))
                                 :direction :output
                                 :if-exists ,(getf options :if-wsdl-exists :error))
         (when xml-file
           (spit-xml xml-file ',name ',supers ',slots ,@options))))
    `(defclass ,name (,@supers)
       (,@slots)
       ,@(chew options)))))

编辑:要回答您的原始问题,您通常不能(反)引用阅读器宏。它们在读取语法的地方执行,我们称之为读取时间。 Reader 宏不参与正常的宏扩展,它们在宏扩展之前起作用。

您可能会创建一个读取器宏,该宏知道它在反引用读取器宏中被调用以使用它,但这需要了解或更改反引用读取器宏的实现相关行为。

但是,您可以从读取器宏返回反引号形式。

关于macros - 引用读取器宏调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13188272/

10-09 13:44