macro_rules 是常规宏吗?
Posted
技术标签:
【中文标题】macro_rules 是常规宏吗?【英文标题】:Is macro_rules a regular macro? 【发布时间】:2021-11-26 23:10:01 【问题描述】:我正在尝试理解 rust 宏语法。 Here我读到宏通常可以以三种方式调用:
mymacro!(<tokens>);
mymacro![<tokens>];
mymacro!<tokens>;
...然后我看到一个示例宏定义也使用宏 (macro_rules
),但语法不符合这些规则:
macro_rules! name <tokens>
name
是一个标记,我们在这里有 4 次合法的宏调用形式,还是macro_rules
是一个关键字而不仅仅是一个宏,并且使用了常规宏不可用的特殊语法?
【问题讨论】:
【参考方案1】:不,macro_rules
是一个特殊的“指令”。您可以检查编译器语法树here。
重要的部分是:
Syntax
MacroRulesDefinition :
macro_rules ! IDENTIFIER MacroRulesDef
你可以看到它是宏语法的入口点。
【讨论】:
我不知道指令实际上是否是正确的词。因此,欢迎进行编辑以指定这一点。 我见过常用的术语是“编译器内置”以上是关于macro_rules 是常规宏吗?的主要内容,如果未能解决你的问题,请参考以下文章