Identifiers
标识符
identifiers.md
commit: 1f9de62e04e6c79922ab78062407a658f4c3fa6a
本章译文最后维护日期:2022-10-22
词法分析:
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_IDENTIFIER
标识符遵循 Unicode标准附录31 中针对 Unicode 15.0版的规范,后面所述内容在此版本中均有备述。 这里举一些标识符的示例:
foo
_identifier
r#true
Москва
東京
其中 UAX #31 中要求标识符使用的(产生式)参数如下:
- 起始字符 :=
XID_Start
,外加一个下划线 (U+005F) - 后续字符 :=
XID_Continue
- 中间字符 := 空
还有一个附加约束,即单个下划线字符不是标识符。
注意: 以下划线开头的标识符通常用于表示有意不会被实际使用的标识符,且会使
rustc
对未被使用的警告静音。
如果标识符没有下面原生标识符章节中描述的 r#
前缀,那它不能是严格关键字或保留关键字。
标识符中不允许使用零宽度非连接符(ZWNJ U+200C)和零宽度连接符(ZWJ U+200D)。
在下列情况下,标识符仅限于 XID_Start
和 XID_Continue
的ASCII子集:
Normalization
标准化
标识符使用Unicode标准附录15中定义的规范化形式C(NFC)进行规范化。如果两个标识符的 NFC形式相等,那么它们就是等价的。
[过程宏][proc macro]和声明宏在其输入中接受规范化的标识符。
Raw identifiers
原生标识符
除了有形式前缀 r#
修饰外,原生标识符与普通标识符类似。(注意形式前缀 r#
不包括在实际标识符中。)与普通标识符不同,原生标识符可以是除上面列出的 RAW_IDENTIFIER
之外的任何严格关键字或保留关键字。