macro_rules 是普通宏吗?
Is macro_rules a regular macro?
我正在尝试理解 Rust 宏语法。 Here 我读到通常可以以 3 种方式调用宏:
mymacro!(<tokens>);
mymacro![<tokens>];
mymacro!{<tokens>};
...然后我看到一个示例宏定义也使用宏 (macro_rules
),但语法不符合这些规则:
macro_rules! name {<tokens>}
name
是一个标记,我们这里有第 4 种合法的宏调用形式,还是 macro_rules
是一个关键字,而不仅仅是宏,并且使用了常规宏不可用的特殊语法?
不,macro_rules
是一个特殊的“指令”。您可以查看编译器语法树here。
重要的部分是:
Syntax
MacroRulesDefinition :
macro_rules ! IDENTIFIER MacroRulesDef
可以看出是宏语法的入口
我正在尝试理解 Rust 宏语法。 Here 我读到通常可以以 3 种方式调用宏:
mymacro!(<tokens>);
mymacro![<tokens>];
mymacro!{<tokens>};
...然后我看到一个示例宏定义也使用宏 (macro_rules
),但语法不符合这些规则:
macro_rules! name {<tokens>}
name
是一个标记,我们这里有第 4 种合法的宏调用形式,还是 macro_rules
是一个关键字,而不仅仅是宏,并且使用了常规宏不可用的特殊语法?
不,macro_rules
是一个特殊的“指令”。您可以查看编译器语法树here。
重要的部分是:
Syntax
MacroRulesDefinition :
macro_rules ! IDENTIFIER MacroRulesDef
可以看出是宏语法的入口