包管理器
Rust 的 Cargo 应该算是众多包管理器当中非常好用的一个。如果接触过前端开发,对 npm/yarn 应该是不陌生的,Go 语言也有 go tool。这些包管理器用来下载正确的依赖库、编译和链接文件,还有管理项目等功能。
C++ 没有一个专用的包管理。C/C++ 一般用 GNU make 来构建项目。GNU make 是一个与语言无关的构建工具。GNU make 非常原始,既没有提供头文件的查找的功能,必须手动指明目录,也无法自动地进行依赖的下载。
幸运的是,Rust 的包管理器 Cargo 解决了这些问题,是一个非常好用的包管理工具。
模块(Modules)
任何 Rust 项目都有一个根模块。如果创建的是一个库,根模块就是 lib.rs 文件。如果是一个可执行的应用,那么根模块就是有 main
函数的文件。
嵌套模块
最简单的创建模块的方法就是 mod{}
。
// mod_within.rs
mod food {
struct Cake;
struct Smoothie;
struct Pizza;
}
fn main() {
let eatable = Cake;
}
如果这个时候进行编译,会发现报错了。
Rust 真的这点上很赞,不单单是报错,连参考的解决方案都写好了。我们按照编译器提示的那样,增加一行代码。
// mod_within.rs
mod food {
struct Cake;
struct Smoothie;
struct Pizza;
}
use food::Cake;
fn main() {
let eatable = Cake;
}
再编译一下,结果发现…
现在编译器说,Cake
是私有的。现在再修改一下代码,在 Cake
的声明前加上 pub
:
// mod_within.rs
mod food {
pub struct Cake;
struct Smoothie;
struct Pizza;
}
use food::Cake;
fn main() {
let eatable = Cake;
}
现在可以编译了。可以发现总共就两步,一步公开,一步引入。没有公开 pub
,默认是私有的,外部是不能调用的。
文件模块
模块也可以是一个文件,把它放在与 mian.rs 同一文件夹下,然后在 main.rs 中引入该模块。我们创建一个文件夹,顺便创建两个文件。
控制台命令如下(用鼠标完成下面的工作也是一个不错的选择):
mkdir modules_demo