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