通过在RUST宏$(...)?
中使用可选参数,我希望能够更改 struct 的构造方式.例如:
struct Field<T>(T);
struct OptionalField<T>(T);
define_struct!(StructName => {
field_one: i32,
field_two?: i32
});
// would ideally evaluate to
struct StructName {
field_one: Field<i32>,
field_two: OptionalField<i32>
}
然而,编写包含重复部分的宏并不是困难的部分,给我带来麻烦的部分是如何使可选问号更改用作 struct 的字段类型的类型.到目前为止,我已经try 了这个:
macro_rules! define_struct {
($name:ident => {
$($field_name:ident$(?)?: $type:ty),*
}) => {
struct $name {
$($field_name: $(Optional)?Field<$type>),*
}
};
}
宏调用很好,并且遵循定义的模式,但是在Field
标识符前插入Optional
是很困难的.部分$(Optional)?
抛出错误:
attempted to repeat an expression containing no syntax variables matched as repeating at this depth
|
| $($field_name: $(Optional)?Field<$type>),*
| ^^^^^^^^^^
有没有办法在不使用语法变量的情况下根据可选宏模式的存在来插入关键字?