附录 A:关键词


以下列表包含 Rust 语言为当前或未来使用保留的关键词。因此,它们不能用作标识符(除非作为原始标识符,我们将在“Raw Identifiers”部分讨论)。标识符是函数、变量、参数、结构体字段、模块、crate、常量、宏、静态值、属性、类型、特征或生命周期的名称。


当前使用的关键词


以下是在使用中的关键词列表,及其功能描述。


  • as - 执行原始类型转换,消除包含项的具体特征的歧义,或重命名 use 语句中的项

  • async - 返回一个 Future ,而不是阻塞当前线程

  • await - 暂停执行直到 Future 的结果准备好

  • break - 立即退出循环

  • const - 定义常量项或常量原始指针

  • continue - 继续到下一个循环迭代

  • crate - 在模块路径中,指的是 crate 根

  • dyn - 动态分派到一个特征对象

  • else - 用于 ifif let 控制流构造的回退

  • enum - 定义一个枚举

  • extern - 链接外部函数或变量

  • false - 布尔假字面量

  • fn - 定义一个函数或函数指针类型

  • for - 对来自迭代器的项进行循环,实现一个特质,或指定一个高阶生命周期

  • if - 根据条件表达式的结果进行分支

  • impl - 实现固有或特质功能

  • in - for 循环语法的一部分

  • let - 绑定一个变量

  • loop - 无条件循环

  • match - 将值匹配到模式

  • mod - 定义一个模块

  • move - 让闭包拥有其所有捕获的内容的所有权

  • mut - 在引用、原始指针或模式绑定中表示可变性

  • pub - 表示结构体字段、 impl 块或模块中的公共可见性

  • ref - 按引用绑定

  • return - 返回函数

  • Self - 我们正在定义或实现的类型的类型别名

  • self - 方法主题或当前模块

  • static - 全局变量或与整个程序执行周期一样长的生命周期

  • struct - 定义一个结构

  • super - 当前模块的父模块

  • trait - 定义一个特质

  • true - 布尔真文字

  • type - 定义类型别名或关联类型

  • union - 定义一个联合体;仅在联合体声明中使用时才是关键字

  • unsafe - 表示不安全的代码、函数、特质或实现

  • use - 将符号引入作用域

  • where - 表示限制类型的子句

  • while - 根据表达式的结果有条件地循环


保留供将来使用的关键词


以下关键字目前尚无任何功能,但被 Rust 保留以供将来可能使用。

  • abstract
  • become
  • box
  • do
  • final
  • macro
  • override
  • priv
  • try
  • typeof
  • unsized
  • virtual
  • yield


原始标识符


原始标识符是允许你在通常不允许的地方使用关键字的语法。你通过在关键字前加上 r# 来使用原始标识符。


例如, match 是一个关键字。如果你尝试编译以下使用 match 作为名称的函数:


文件名: src/main.rs

fn match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}


你会得到这个错误:

error: expected identifier, found keyword `match`
 --> src/main.rs:4:4
  |
4 | 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"));
}


此代码将不会有任何错误地编译。注意函数名定义中的 r# 前缀以及在 main 中调用函数的地方。


原始标识符允许你使用任何你选择的单词作为标识符,即使那个单词碰巧是保留关键字。这给了我们更多的自由来选择标识符名称,并且让我们可以与这些单词不是关键字的语言编写的程序集成。此外,原始标识符允许你使用与你的 crate 使用的不同 Rust 版本编写的库。例如, try 在 2015 版本中不是关键字,但在 2018 版本中是。如果你依赖于一个使用 2015 版本编写的库并且有一个 try 函数,你需要使用原始标识符语法,即 r#try ,在这种情况下,从你的 2018 版本代码调用该函数。有关版本的更多信息,请参阅附录 E。