🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客
🐳Java基础:Java基础_IT闫的博客-CSDN博客
🐋c语言:c语言_IT闫的博客-CSDN博客
🐟MySQL:数据结构_IT闫的博客-CSDN博客
🐠数据结构:数据结构_IT闫的博客-CSDN博客
💎C++:C++_IT闫的博客-CSDN博客
🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客
💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客
🥏python:python_IT闫的博客-CSDN博客
🐠离散数学:离散数学_IT闫的博客-CSDN博客
🥽Linux:Linux_Y小夜的博客-CSDN博客
🚝Rust:Rust_Y小夜的博客-CSDN博客
欢迎收看,希望对大家有用!
目录
🎯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