[英]Quote a reader macro invocation
有沒有辦法引用讀者宏的調用? 更具體地說,我想創建一個宏,一旦評估,將生成一個defclass語句和一個相應的XML文件。 這可能嗎?
我想過使用#.( ... )
閱讀器宏,但我認為宏參數不會在閱讀器宏內部使用。 它是否正確?
因此,我的第二個想法是嘗試生成一個包含讀者宏的語句,但我不確定是否有辦法做到這一點。
擴展宏調用時有關生成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宏不參與正常的宏擴展,它們在宏擴展之前就行動了。
您可能會創建一個讀取器宏,它知道它正在一個后引用讀取器宏中被調用以使用它,但它需要知道或更改反引號讀取器宏的實現依賴行為。
但是,您可以從讀取器宏返回反引號表單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.