簡體   English   中英

宏內部的宏創建一個無列表

[英]macro inside of macro creates a list of None

我定義了兩個宏:

(defmacro property [name type]
  `(setv ^(of Optional ~type) ~name None))

(defmacro data-type [vname &rest propertys]
  `(with-decorator dataclass
    (defclass ~vname []
      ~propertys)))

當被稱為:

(data-type my-test-type
    (property name str)
    (property unitprice float)
    (property qty_on_hand int)
    (property test int))

並擴展並翻譯成 python 它產生以下內容:

@dataclass
class my_test_type:
    name: Optional[str] = None
    unitprice: Optional[float] = None
    qty_on_hand: Optional[int] = None
    test: Optional[int] = None
    [None, None, None, None]

在沒有嵌套宏的情況下編寫它仍然會產生一個無列表:

(data-type my-test-type
    (setv ^(of Optional str) name None
          ^(of Optional float) unitprice None
          ^(of Optional int) qty_on_hand None
          ^(of Optional int) test None))
@dataclass
class my_test_type:
    name: Optional[str] = None
    unitprice: Optional[float] = None
    qty_on_hand: Optional[int] = None
    test: Optional[int] = None
    [None]

這個[None, None, None, None]的列表來自哪里? 雖然沒有列表不會破壞任何東西,但它仍然有點刺耳,我希望我知道編寫這個宏以避免無列表的更好方法是什么。

看起來你寫了~propertys但意思是~@propertys 您希望將每個屬性聲明拼接到defclass中,而不是將它們組合成一個列表。 進行此更改會刪除None的尾隨列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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