使用 Packages、Crate 和 Modules 管理不断增长的项目

当您编写大型程序时,组织代码将变得越来越多 重要。通过对相关功能进行分组并使用不同的 功能中,您将阐明在何处可以找到实现特定 功能以及更改功能工作方式的去向。

到目前为止,我们编写的程序都位于一个文件中的一个模块中。作为 项目增长,您应该通过将代码拆分为多个模块来组织代码 ,然后是多个文件。一个包可以包含多个二进制 crate 和 可选 1 个 Library Crate。随着包的增长,您可以将部件提取到 单独的 crate 成为外部依赖项。本章涵盖所有内容 这些技术。对于包含一组相互关联的 一起发展的软件包,Cargo 提供了工作区,我们将介绍这些 在第 14 章的“Cargo Workspaces”部分。

我们还将讨论封装实现细节,以便您重用 更高级别的代码:实现作后,其他代码可以 通过其公共接口调用您的代码,而不必知道 实施工作。您编写代码的方式定义了哪些部分是公共的 要使用的其他代码以及哪些部分是您 保留更改的权利。这是限制细节量的另一种方法 你必须牢记在心。

一个相关的概念是 scope:编写代码的嵌套上下文有一个 定义为 “In scope” 的名称集。当阅读、写入和 编译代码时,程序员和编译器需要知道特定的 name 在特定位置是指变量、函数、结构体、枚举、模块、 常量或其他项,以及该项的含义。您可以创建 scopes 和 更改在范围内或范围外的名称。您不能有两个项目具有 同一范围内的相同名称;工具可用于解决名称冲突。

Rust 具有许多功能,允许您管理代码的 organization,包括哪些详细信息公开,哪些详细信息是私有的, 以及程序的每个范围中的名称。这些功能有时 统称为模块系统,包括:

  • 包:一个 Cargo 功能,可让您构建、测试和共享 crate
  • 箱子:生成库或可执行文件的模块树
  • Modules and use:用于控制 organization、scope, 和 路径的隐私性
  • 路径:一种命名项的方法,例如结构、函数或模块

在本章中,我们将介绍所有这些功能,讨论它们如何交互,以及 说明如何使用它们来管理范围。到最后,您应该有一个坚实的 了解模块系统,并能够像专业人士一样使用示波器!

本文档由官方文档翻译而来,如有差异请以官方英文文档(https://doc.rust-lang.org/)为准