🎯Rust代码组织
- 代码组织主要包括:
—哪些细节可以暴露,哪些细节是私有的。
—作用域内哪些名称有效
—...
- 模块系统:
包(Packages):Cargo 的一个功能,它允许你构建、测试和分享 crate。
Crates :一个模块的树形结构,它形成了库或二进制项目。
模块(Modules)和 use:允许你控制作用域和路径的私有性。
路径(path):一个命名例如结构体、函数或模块等项的方式
🎯package和crate
crate是 Rust 在编译时最小的代码单位。
- crate类型:
—binary(二进制)
—library(库)
- Crate Root:
—是源代码文件
—Rust编译器从这里开始,组成你得Crate的根Moudule
- 一个package:
—一个包会包含一个 Cargo.toml 文件,阐述如何去构建这些 crate。
—只能包含0-1个library crate
—可以包含任意数量的binary crate
—但必须至少包含一个crate(library或binary)
🎯Cargo的惯例
src/main.rs 就是一个与包同名的二进制 crate 的 crate 根。
src/lib.rs,包带有与其同名的库 crate,且 src/lib.rs 是 crate 根。
- 一个包同时含有 src/main.rs 和 src/lib.rs,则它有两个 crate:
—一个二进制的和一个库的,且名字都与包相同。
- 一个package可以多个binary crate;
—文件放在src/bin
—每个文件是单独的binary crate
🎯Crate的作用
将相关功能组合到一个作用域内,便于在项目进行共享
—防止冲突
例如rand crate,访问它的功能需要通过它的名字:rand
🎯定义module来控制作用域和私有性
Module:
- 模块 让我们可以将一个 crate 中的代码进行分组
- 提高可读性与重用性
- 利用模块控制项的 私有性
建立module:
—mod关键字
—可嵌套
—在模块内,我们还可以定义其他的模块,定义的其他项,比如结构体、枚举、常量、特性、或者函数。
mod front_of_house { mod hosting { fn add_to_waitlist() {} fn seat_at_table() {} } mod serving { fn take_order() {} fn serve_order() {} fn take_payment() {} } }
src/main.rs
和src/lib.rs
叫做 crate 根。之所以这样叫它们是因为这两个文件的内容都分别在 crate 模块结构的根组成了一个名为crate
的模块,该结构被称为 模块树(module tree)。
crate └── front_of_house ├── hosting │ ├── add_to_waitlist │ └── seat_at_table └── serving ├── take_order ├── serve_order └── take_payment