附录 A:关键字
以下清单包含了 Rust 语言当前或今后要用到的一些关键字。由此,他们便不能被用作标识符(除在 “原始标识符” 小节中咱们将讨论的那些外)了。所谓标识符,是函数、变量、参数、结构体字段、模组、代码箱、常量、宏、静态值、属性、类型、特质或生命周期等的名字。
当前在用的关键字
Keywords Currently in Use
下面是当前在用关键字的清单,带有其作用描述。
as- 执行原生强制转换,primitive casting,消除包含着某个项目的特定特质歧义,disambiguate the specific trait containing a item,或重命名use语句中的项目;async- 返回一个Future类型值,而非阻塞当前线程;await- 在某个Future值的结果准备好前,暂停程序执行;break- 立即退出某个循环;const- 定义出常量项目或常量原始指针;continue- 继续下一循环迭代;crate- 在模组路径中,指向代码箱根;dyn- 动态调遣到某个特质对象,参考 特质对象执行动态调遣;else-if的回退,及if let控制流的构件;extern- 链接外部函数或变量;false- 布尔值假的字面值;fn- 定义出某个函数或函数指针类型;for- 对某个迭代器的项目加以迭代、实现某个特质,或指明某个更高级别的生命周期,a higher-ranked lifetime;if- 基于某个条件表达式结果的分支;impl- 实现固有或特质功能,implement inherent or trait functionality;in-for循环语法的一部分;let- 绑定某个变量;loop- 无条件地循环;match- 将某个值与模式匹配;mod- 定义出模组;move- 领导闭包取得其所有捕获值的所有权;mut- 注解出引用、原始指针或模式绑定等中的可变性;pub- 注解出结构体、impl代码块或模组等中的公开可见性;ref- 按引用绑定;return- 自函数返回值;Self- 咱们正定义或实现中类型的类型别名;self- 方法主体,method subject,或当前模组;static- 在整个程序执行过程持续有效的全局变量或生命周期;struct- 定义出某个结构体;super- 当前模组的父模组;trait- 定义出某个特质;true- 布尔值真的字面值;type- 定义出某个类型别名或关联类型;union- 定义出某个 联合体,是在联合体声明时用到的唯一关键字;unsafe- 注解非安全代码、函数、特质或一些实现;use- 将符号带入到作用域;where- 注解约束某个类型的子句;while- 基于某个表达式结果而有条件的循环。
为今后使用保留的关键字
Keywords Reserved for Future Use
以下关键字尚无任何功能,但被 Rust 为今后的潜在使用而保留。
abstractbecomeboxdofinalmacrooverrideprivtrytypeofunsizedvirtualyield
原始标识符
Raw Identifiers
原始标识符,raw identifiers 属于允许实现使用一般不被允许关键字的语法。是通过在关键字前加上前缀 r#,使用原始标识符的。
比如,match 是个关键字。在咱们尝试编译下面这个使用 match 作其名字的函数时:
文件名:src/main.rs
#![allow(unused)] fn main() { fn match(needle: &str, haystack: &str) -> bool { haystack.contains(needle) } }
咱们将得到这样的报错:
error: expected identifier, found keyword `match`
--> src/main.rs:1:4
|
1 | fn match(needle: &str, haystack: &str) -> bool {
| ^^^^^ expected identifier, found keyword
该报错显示咱们无法将关键字 match 用作函数标识符。要将 match 用作函数名字,咱们就需要使用原始标识符语法,像下面这样:
文件名:src/main.rs
fn r#match(needle: &str, haystack: &str) -> bool { haystack.contains(needle) } fn main() { assert! (r#match("foo", "foobar")); }
此代码将不带任何错误地编译。请注意那个函数的定义中,与 main 中该函数被调用处其名字上的 r# 前缀。
原始标识符实现了将任何咱们所选的词语用作标识符,即使那个词语碰巧是个保留的关键字。这给到咱们更自由地选择标识符名字,以及实现与一些以其中这些词语不属于关键字的语言,所编写的程序集成。此外,原始标识符实现了,对那些以不同于咱们代码箱 Rust 版本编写库加以运用。比如,在 2015 版中 try 就不是个关键字,但在 2018 版本中却是。若咱们依赖于一个使用 2015 版本编写的库,而该库有一个 try 函数,那么咱们就将需要在这种情况下,使用原始标识符 r#try,来从咱们的 2018 版本的代码,调用那个函数。请参阅 附录 E 了解更多有关版本的信息。
(End)