Rust_包/Crate
使用包、Crate和模块管理不断增长的项目
- 包 ( Packages ):Cargo 的一个功能,它允许你构建、测试和分享 crate。
- Crates :一个模块的树形结构,它形成了库或二进制项目。
- 模块 ( Modules )和 use :允许你控制作用域和路径的私有性。
- 路径 ( path ):一个命名例如结构体、函数或模块等项的方式。
- crate是rust在编译时的最小代码单位。如果使用rustc来编译,编译器依然会将这个文件认作一个crate。
- crate的两种形式:二进制项和库
- 包 ( package )是提供一系列功能的一个或者多个 crate。
定义模块来控制作用域和私有域
工作方式:
从crate根节点开始(寻找需要被编译的代码)→声明模块→声明子模块
- 声明模块 : 在 crate 根文件中,你可以声明一个新模块;比如,你用
mod garden;
声明了一个叫做garden
的模块。编译器会在下列路径中寻找模块代码: - 内联,在大括号中,当
mod garden
后方不是一个分号而是一个大括号 - 在文件 src/garden.rs
- 在文件 src/garden/mod.rs
- 声明子模块 : 在除了 crate 根节点以外的其他文件中,你可以定义子模块。比如,你可能在src/garden.rs中定义了
mod vegetables;
。编译器会在以父模块命名的目录中寻找子模块代码: - 内联,在大括号中,当
mod vegetables
后方不是一个分号而是一个大括号 - 在文件 src/garden/vegetables.rs
- 在文件 src/garden/vegetables/mod.rs
- 模块中的 代码路径 :举例而言,一个 garden vegetables 模块下的
Asparagus
类型可以在crate::garden::vegetables::Asparagus
被找到。 - 公有(要加pub)和私有
- 使用use关键字引入
use crate::garden::vegetables::Asparagus;
引用模块项目的路径
- 绝对路径:从crate根开始
- 相对路径:从当前模块开始,以
self
、super
或定义在当前模块中的标识符开头。
1 |
|
super开始的相对路径
通过在路径的开头使用 super
,从父模块开始构建相对路径,而不是从当前模块或者 crate 根开始。
使用as关键字提供新的名称
1 |
|
使用pub use重导出名称
- 使用
use
关键字,将某个名称导入当前作用域后,这个名称在此作用域中就可以使用了,但它对此作用域之外还是私有的。 - 将
pub
和use
合起来使用
1 |
|
嵌套路径来消除大量的use行
1 |
|
1 |
|
通过glob运算符将所有的公有定义引入作用域
use std::collections::*;
Rust_包/Crate
https://pqcu77.github.io/2025/02/19/Rust-包-Crate/