04-标识符

标识符 — The Rust Reference

译文 · 基于 The Rust Reference

原文链接: https://doc.rust-lang.org/reference/identifiers.html

r[ident]

标识符

r[ident.syntax]

IDENTIFIER_OR_KEYWORD -> ( XID_Start | `_` ) XID_Continue*

XID_Start -> <`XID_Start` defined by Unicode>

XID_Continue -> <`XID_Continue` defined by Unicode>

RAW_IDENTIFIER -> `r#` IDENTIFIER_OR_KEYWORD

NON_KEYWORD_IDENTIFIER -> IDENTIFIER_OR_KEYWORD _except a [strict][lex.keywords.strict] or [reserved][lex.keywords.reserved] keyword_

IDENTIFIER -> NON_KEYWORD_IDENTIFIER | RAW_IDENTIFIER

RESERVED_RAW_IDENTIFIER ->
    `r#` (`_` | `crate` | `self` | `Self` | `super`) !XID_Continue

r[ident.unicode] 标识符遵循 Unicode 标准附录 #31 中针对 Unicode 17.0 版本的规范,并加上下文所述的补充。标识符的一些例子:

  • foo
  • _identifier
  • r#true
  • Москва
  • 東京

r[ident.profile] 从 UAX #31 使用的配置文件为:

注意 以下划线开头的标识符通常用于表示有意不使用的标识符,并会在 rustc 中消除未使用警告。

r[ident.keyword] 若没有下文 原始标识符 中所述的 r# 前缀,标识符不得为 严格 或 保留 关键字。

r[ident.zero-width-chars] 标识符中不允许零宽非连接符(ZWNJ U+200C)和零宽连接符(ZWJ U+200D)字符。

r[ident.ascii-limitations] 在下列情形中,标识符被限制为 XID_Start 和 XID_Continue 的 ASCII 子集:

r[ident.normalization]

规范化

标识符使用 Unicode 标准附录 #15 中定义的规范化形式 C(NFC)进行规范化。两个标识符若其 NFC 形式相等则相等。

过程宏 和 声明宏 在其输入中接收规范化后的标识符。

r[ident.raw]

原始标识符

r[ident.raw.intro] 原始标识符与普通标识符类似,但带有 r# 前缀。(注意 r# 前缀并不包含在实际标识符中。)

r[ident.raw.allowed] 与普通标识符不同,原始标识符可以是除上文 RAW_IDENTIFIER 所列之外的任何严格或保留关键字。

r[ident.raw.reserved] 使用 [RESERVED_RAW_IDENTIFIER] token 是错误。

最后修改 August 21, 2026: 更新 (76fc81a2e)