可以创建可创建宏的宏(宏起始):
macro_rules! inception {
($x:ident) => {
macro_rules! foo {
($x) => {
"was x from parent macro"
};
(b) => {
"was b"
}
}
};
}
inception!(a);
fn main() {
println!("{}", foo!(a));
}
此will print was x from parent macro
。
这是否是个好主意,但尝试使用此方法在内部$
中使用macro_rules!
时遇到了问题。也就是说,我无法将b
替换为$($any:tt)*
(例如,捕获所有非$x
的情况),因为这样做会产生以下错误:
error: attempted to repeat an expression containing no syntax variables matched as repeating at this depth
--> src/main.rs:8:15
|
8 | ($($any:tt)*) => {
| ^^^^^^^^^
有没有解决的办法,还是不可能在嵌套的$
中使用macro_rules!
?