Quote a reader macro invocation
是否可以引用阅读器宏的调用?更具体地说,我想创建一个宏,该宏一旦被评估,将生成defclass语句和相应的XML文件。这可能吗?
我考虑过使用
因此,我的第二个想法是尝试生成一个包含阅读器宏的语句,但是我不确定是否有办法做到这一点。
关于扩展宏调用时生成XML文件的任何建议吗?
预先感谢您的任何想法。
"阅读器宏"和"宏"是完全不同的野兽,用于做非常不同的事情。
"阅读器宏"通常是一个函数。它们绑定到一个(或两个特定的序列)字符,并更改了读取源代码的方式。它们与代码无关,而与对象创建有关。
对于"阅读器宏",没有什么"宏参数"的明显定义(除了可能导致首先调用阅读器宏的字符序列之外,这很有用)例如,当您阅读列表时,将
类似的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | (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))))) |
编辑:要回答您的原始问题,通常不能(引用)引用阅读器宏。它们是在读取语法的地方执行的,我们称之为读取时间。阅读器宏不参与正常的宏扩展,而是在宏扩展之前起作用。
您可能会创建一个读取器宏,知道它在反引号读取器宏中被调用以与之一起使用,但是这将需要知道或更改反引号读取器宏的与实现相关的行为。
但是,您可以从阅读器宏中返回带引号的表格。