Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

标识符

Lexer
IDENTIFIER_OR_KEYWORD → ( XID_Start | _ ) XID_Continue*

XID_Start<XID_Start defined by Unicode>

XID_Continue<XID_Continue defined by Unicode>

RAW_IDENTIFIERr# IDENTIFIER_OR_KEYWORD

NON_KEYWORD_IDENTIFIERIDENTIFIER_OR_KEYWORDexcept a strict or reserved keyword

IDENTIFIERNON_KEYWORD_IDENTIFIER | RAW_IDENTIFIER

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

标识符遵循 Unicode 标准附录 #31 中 Unicode 版本 17.0 的规范,并加上下面描述的附加内容。标识符的一些示例:

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

从 UAX #31 使用的配置文件是:

Note

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

标识符不能是严格保留关键字,除非使用下面原始标识符中描述的 r# 前缀。

零宽非连接符 (ZWNJ U+200C) 和零宽连接符 (ZWJ U+200D) 字符不允许在标识符中使用。

在以下情况下,标识符被限制为 XID_StartXID_Continue 的 ASCII 子集:

规范化

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

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

原始标识符

原始标识符类似于普通标识符,但以 r# 为前缀。(请注意,r# 前缀不作为实际标识符的一部分。)

与普通标识符不同,原始标识符可以是任何严格或保留关键字,除了上面为 RAW_IDENTIFIER 列出的那些。

使用 RESERVED_RAW_IDENTIFIER 词法单元是错误的。