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 是常规宏吗?的主要内容,如果未能解决你的问题,请参考以下文章

Ipv6属性常规选项中的5个参数是?

管理SQL Server AlwaysOn——常规监控——常规监控

“常规”的技术定义是啥?

什么是 Java 中的“常规文件”?

Excel非常规快捷键

使用常规数据库作为数据仓库