1.rust的代码组织
代码组织主要包括:
- 哪些细节可以暴露,哪些细节是私有的
- 作用域内哪些名称有效
模块系统:
- package(包):cargo的特性,可以构建、测试、共享crate
- crate(单元包):一个模块树,他可以产生一个library或可执行文件
- module(模块):可以控制代码的组织,作用域,私有路径
- path(路径): 为struct、function、module等这些命名的方式
2.package crate
crate 的类型:
- binary
- library
crate root :
- 它是源代码文件
- rust编译器从这里开始,组成crate的根module
package:
- 包含一个cargo.toml,它描述了如何构建这些crates
- 可以有多个crate,但只能有一个library crate
- 可以有任意数量的binary crate
- 但是必须至少包含一个crate(library crate或binary crate)
3.cargo 的项目结构
src/main.rs
- binary crate 的 crate root
- crate名与package名相同
src/lib.rs:
- package包含一个library crate
- library crate 的crate root
- crate名与package名相同
如果有main.rs,那么就有一个binary crate
如果有lib.rs,那么就有一个library crate
他们两个是入口文件
-
cargo 会把这些crate root 文件交给rustc来构建library或binary
-
一个package可以同时包含src/main.rs和src/lib.rs
- 一个binary crate,一个library crate
- 这两个crate名称都与package名称相同
-
一个package可以有多个binary crate
- 源代码文件放在src/bin下面
- 每个文件是单独的binary crate
4.crate的作用
- 它可以将相关功能组合到一个作用域内,便于在项目间进行分享
- 可以防止命名冲突
5.定义module来控制作用域和私有性
module
- 在一个crate内,将代码进行分组
- 可以增加代码的可读性,易于复用
- 控制条目的私有性,public,private
建立module
- mod关键字
- 可以嵌套
- 可以包含其他项(struct、enum、常量、trait函数等)的定义
mod front_of_house {
mod hosting {
fn add_to_waitlist() {}
fn seat() {}
}
mod serving {
fn take_order() {}
}
}
- src/main.rs和src/lib.rs叫做crate roots,是crate的根
- 这两个文件的内容都形成了名为crate的模块,位于整个模块树的根部