4 个版本 (破坏性更新)
0.4.1 | 2024年1月26日 |
---|---|
0.4.0 |
|
0.3.0 | 2024年1月18日 |
0.2.0 | 2024年1月4日 |
0.0.1 | 2023年12月26日 |
#264 在 过程宏 中
每月 26 次下载
用于 6 个Crate(通过 cowstr)
49KB
792 行
代码产品
该crate提供以下两项内容
- A 库 通过扩展产品语法生成代码。这是该crate的主要目标,因为它使得从其他proc macros以方便的方式生成代码成为可能。
- 独立的
product!{}
和product_items!{}
宏,使用库生成代码,这些宏本身也很有用。
产品扩展
名称 product
是因为它会扩展为所有定义集的乘积。例如,给出了两个定义集 'Foo and Bar' 和 'This and That',显示了不同的语法变体
# use code_product::product;
# trait Trait<T>{}
# struct This<T>(T); struct That<T>(T);
# struct Foo; struct Bar;
product!{
// Rather elaborate form with named definitions:
// define `Type` to expand to `This` and `That`
$(Type: (This) (That))
// and inline define `T` to expand to `Foo` and `Bar`
impl Trait<$($T: (Foo)(Bar))> for $Type<$T> {}
}
或
# use code_product::product;
# trait Trait<T>{}
# struct This<T>(T); struct That<T>(T);
# struct Foo; struct Bar;
product!{
// Alternative form inlining definition and reference by index:
impl Trait<$((Foo)(Bar))> for $((This)(That))<$0> {}
}
以上两种情况都会扩展四次到
# trait Trait<T>{}
# struct This<T>(T); struct That<T>(T);
# struct Foo; struct Bar;
impl Trait<Foo> for This<Foo> {}
impl Trait<Foo> for That<Foo> {}
impl Trait<Bar> for This<Bar> {}
impl Trait<Bar> for That<Bar> {}
产品语法
产品定义的详细语法描述在: 产品语法。
依赖项
~58KB