04-标识符
标识符 — The Rust Reference
2 分钟阅读
译文 · 基于 The Rust Reference
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_identifierr#trueМосква東京
r[ident.profile] 从 UAX #31 使用的配置文件为:
- Start :=
XID_Start,外加下划线字符(U+005F) - Continue :=
XID_Continue - Medial := 空
注意 以下划线开头的标识符通常用于表示有意不使用的标识符,并会在
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 子集:
extern crate声明([AsClause] 标识符除外)- 路径中引用的外部 crate 名
- 没有
path属性 而从文件系统加载的 模块 名 - 带
no_mangle属性的项 - 外部块 中的项名
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 是错误。