使用宏起始时在内部宏中使用$

时间:2019-03-02 20:02:40

标签: rust macros

可以创建可创建宏的宏(宏起始):

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!

0 个答案:

没有答案