Я пытаюсь сопоставить struct
в макросе Rust. Мне нужно вытащить
struct
друг от друга, чтобы получить его имя. Я понял, что блок
Мэтчер сделает свое дело. Рассмотрим, например, это:
macro_rules! multi {
(struct $name:ident $block:block) => {
enum George {$name}
}
}
multi!{
struct Fred {
a:String
}
}
, который расширяется до
enum George { Fred, }
что примерно так.
Однако, если я верну это обратно в struct
, это не получится.
macro_rules! multi {
(struct $name:ident $block:block) => {
struct $name $block
}
}
, который дает эту ошибку.
error: expected `where`, `{`, `(`, or `;` after struct name, found `{ a: String }`
--> src/main.rs:64:22
|
64 | struct $name $block
| ^^^^^^ expected `where`, `{`, `(`, or `;` after struct name
Похоже, что {a: String}
рассматривается как один токен, скорее
чем повторный анализ; но это то, что должно быть там.