01-示例宏
示例宏 — The Rust Reference
2 分钟阅读
译文 · 基于 The Rust Reference
r[macro]
r[macro.intro]
Rust 的功能与语法可以通过称为宏的自定义定义来扩展。它们被赋予名称,并通过一致的语法调用:some_extension!(...)。
定义新宏有两种方式:
r[macro.invocation]
r[macro.invocation.syntax]
MacroInvocation ->
SimplePath `!` DelimTokenTree
DelimTokenTree ->
`(` TokenTree* `)`
| `[` TokenTree* `]`
| `{` TokenTree* `}`
TokenTree ->
Token _except [delimiters][lex.token.delim]_ | DelimTokenTree
MacroInvocationSemi ->
SimplePath `!` `(` TokenTree* `)` `;`
| SimplePath `!` `[` TokenTree* `]` `;`
| SimplePath `!` `{` TokenTree* `}`
r[macro.invocation.intro] 宏调用在编译时展开宏,并用宏的结果替换该调用。宏可在下列情形中被调用:
r[macro.invocation.expr]
r[macro.invocation.pattern]
r[macro.invocation.type]
r[macro.invocation.item]
r[macro.invocation.nested]
macro_rules 转写器r[macro.invocation.extern]
r[macro.invocation.item-statement]
当用作项或语句时,使用 [MacroInvocationSemi] 形式:在不使用花括号时,末尾需要分号。在宏调用或 macro_rules 定义之前从不允许 可见性限定符。
| |
r[macro.invocation.name-resolution]
宏调用可通过两种作用域解析: