附录 A:关键词

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

当前使用的关键词

以下是当前使用的关键词列表,以及它们的描述。

  • as - 执行原始类型转换,消除包含项目的特定特征的歧义,或在 use 语句中重命名项目
  • async - 返回一个 Future 而不是阻塞当前线程
  • await - 暂停执行,直到 Future 的结果准备就绪
  • break - 立即退出循环
  • const - 定义常量项或常量原始指针
  • continue - 继续执行下一个循环迭代
  • crate - 在模块路径中,引用箱根目录
  • dyn - 对特征对象进行动态调度
  • else - ifif let 控制流结构的回退
  • enum - 定义枚举
  • extern - 链接外部函数或变量
  • false - 布尔值 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"));
}

此代码将编译而不会出现任何错误。请注意函数定义中以及在 main 中调用函数时的函数名称上的 r# 前缀。

原始标识符允许您使用任何您选择的单词作为标识符,即使该单词恰好是保留关键字。这使我们有更大的自由选择标识符名称,并让我们与用其他语言编写的程序集成,在这些语言中这些单词不是关键字。此外,原始标识符允许您使用用与您的板条箱使用的 Rust 版本不同的 Rust 版本编写的库。例如,try 在 2015 版中不是关键字,但在 2018 版中是。如果您依赖于用 2015 版编写的库并且具有 try 函数,则需要使用原始标识符语法 r#try(在本例中)从您的 2018 版代码中调用该函数。见 附录 E有关版本的更多信息。