标识符
词法分析器:
IDENTIFIER_OR_KEYWORD
XID_Start XID_Continue*
|_
XID_Continue+RAW_IDENTIFIER :
r#
IDENTIFIER_OR_KEYWORD 除了crate
,self
,super
,Self
NON_KEYWORD_IDENTIFIER : IDENTIFIER_OR_KEYWORD 除了 严格 或 保留 关键字
IDENTIFIER
NON_KEYWORD_IDENTIFIER | RAW_IDENTIFIERRESERVED_RAW_IDENTIFIER :
r#_
标识符遵循 Unicode 标准附件 #31 中针对 Unicode 16.0 版本的规范,并进行了如下所述的补充。 一些标识符的例子
foo
_identifier
r#true
莫斯科
东京
UAX #31 中使用的配置文件是
- Start :=
XID_Start
,加上下划线字符 (U+005F) - Continue :=
XID_Continue
- Medial := 空
附加约束是单个下划线字符不是标识符。
注意: 以下划线开头的标识符通常用于指示有意未使用的标识符,并将消除
rustc
中的未使用警告。
标识符不能是 严格 或 保留 关键字,除非使用 原始标识符中描述的 r#
前缀。
零宽度非连接符 (ZWNJ U+200C) 和零宽度连接符 (ZWJ U+200D) 字符在标识符中是不允许的。
在以下情况下,标识符被限制为 XID_Start
和 XID_Continue
的 ASCII 子集
extern crate
声明(AsClause 标识符除外)- 在 路径 中引用的外部 crate 名称
- 从文件系统加载的 模块 名称,没有
path
属性 no_mangle
属性的项目- 外部块 中的项目名称
规范化
标识符使用 Unicode 标准附件 #15 中定义的规范化形式 C (NFC) 进行规范化。Unicode 标准附件 #15。如果两个标识符的 NFC 形式相等,则它们相等。
原始标识符
原始标识符类似于普通标识符,但以 r#
为前缀。(请注意,r#
前缀不包含在实际标识符中。)
与普通标识符不同,原始标识符可以是任何严格或保留关键字,但 RAW_IDENTIFIER
上面列出的那些除外。
使用 RESERVED_RAW_IDENTIFIER 标记 r#_
是错误的,以避免与 通配符模式 混淆。