我想在声明性宏中接受结构成员,作为生成具有公共成员的枚举的简单方法(我想我必须这样做,因为我想用serde从预定义的JSON格式中重新定义),但它不起作用:
我认为应该工作:
macro_rules! test {
($field_1:tt, $field_2:tt) => {
#[derive(Debug)]
struct Test {
first: String,
$field_1,
$field_2,
}
};
}
test!(a: i32, b: i32);
字符串
错误:
Compiling playground v0.0.1 (/playground)
error: no rules expected the token `:`
--> src/lib.rs:12:8
|
1 | macro_rules! test {
| ----------------- when calling this macro
...
12 | test!(a: i32, b: i32);
| ^ no rules expected this token in macro call
|
note: while trying to match `,`
--> src/lib.rs:2:17
|
2 | ($field_1:tt, $field_2:tt) => {
| ^
error: could not compile `playground` (lib) due to previous error
型
(rust playground)
有没有什么方法可以做到这一点,或者我必须求助于一个proc宏?
1条答案
按热度按时间jutyujz01#
TokenTree
(:tt
)是“单个标记或标记树的分隔序列”您缺少分隔符/没有匹配足够的标记树(每个字段定义有三个)。要做到这一点,您可以匹配组成字段定义的所有三个令牌树:
字符串
或者对于任意数量的字段定义:
型