簡體   English   中英

引用一個讀者宏調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM