Modules

7 Package(包), Crates(箱) and Modules(模块)

7.1 package and create

当我们使用cargo new my-project命令创建一个工程的时候,我们创建了一个package。
package包含一个cargo.toml文件

crate是rust编译的入口。 A crate is a binary or library
package至少要包含一个crate,可以包含0个或者多个lib crate,可以包含任意多个bin crate。

如果package包含src/main.rs, src/lib.rs, 那么就说package中包含一个和package同名的bin crate和一个同名的lib crate
在src/bin目录中存放的所有文件,都是一个单独的bin crate

7.2 module

module用来组织crate中的代码,和控制私有性。
module front_of_house; 来声明模块。
模块中的单元默认都是私有的,使用pub关键字,使得单元在外部可以使用

7.3 pub && use

公开的模块或者函数,可以通过use来引入到其他模块。
pub use联合使用,可以把一个引入的模块重新导出。

7.4 分文件

如果是叶子模块,那么只有一个对应名字的文件,包含模块内容
如果是非叶子模块,那么会有一个对应名字的文件,包含模块内容;并且会有一个目录,包含子模块内容。
src/lib.rs – module front_of_house; content of root module;
-front_of_house.rs – declare of module hosting & servering; content of module front_of_house;
-front_of_house/hosting – content of module hosting
-servering – content of module servering

7.5 Workspace

A workspace is a set of packages that share the same Cargo.lock and output directory.
当项目不断增大,需要把library crate分为多个的时候,需要用的这样的分割方式。

下面的例子,我们创建一个包含一个binary package和两个libraries

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mkdir add
cd add
echo <<EOF
[workspace]
members = [
"adder",
"add-one",
"add-two",
]
EOF > Cargo.toml

cargo new adder # create binary
cargo new add-one --lib # Created library `add-one` package
cargo new add-two --lib # Created library `add-two` package

# add dependency to binary adder
echo <<EOF
[dependencies]
add-one = { path = "../add-one" }
add-one = { path = "../add-two" }
EOF >> adder/Cargo.toml
© 2023 PLAYAROUND All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero