当内部宏接受参数时,如何定义一个宏来定义另一个宏?

时间:2018-12-29 16:46:07

标签: macros rust

要复制的最小代码:

macro_rules! test {
    ($name:ident: $count:expr) => {
        macro_rules! $name {
            ($($v:expr),*) => {}
        }
    }
}

test!(yo: 123);

错误:

error: attempted to repeat an expression containing no syntax variables matched as repeating at this depth
 --> src/lib.rs:4:15
  |
4 |             ($($v:expr),*) => {}
  |               ^^^^^^^^^

删除$count:expr或将$count:expr更改为类似$count:block的其他类型,都会忽略该错误,但我确实需要将其设为expr。错误是什么意思?

1 个答案:

答案 0 :(得分:4)

这是known issue (#35853)。当前建议的解决方法是将touches作为单独的令牌传递。然后,您可以打电话给自己,并传递$

$