在以下示例中,取自nom
,参数$submac
在指定位置中具有ident!( $($args:tt)* )
。我的印象是ident!(...)
是一个宏调用,但据我所知,nom
没有定义名为ident
的宏。 Rust关于宏的文档没有指定宏调用甚至可以出现在指定位置。
#[macro_export]
macro_rules! exact (
($i:expr, $submac:ident!( $($args:tt)* )) => ({
terminated!($i, $submac!( $($args)*), eof!())
});
($i:expr, $f:expr) => (
exact!($i, call!($f));
);
);
正式语法中的ident!(...)
是什么?
答案 0 :(得分:2)
我的印象是
ident!(...)
是一个宏调用
不是。这是故意看起来像宏调用的东西。添加空间可能会使其更加明显:
macro_rules! example {
($foo:ident !) => (1);
}
fn main() {
example!(hello!);
}