rust相比于C++,一个优势在于有一个现代化的包管理系统,我们不用搞各种命令空间和依赖的问题。这里主要记录了一般文件打包的方式。
rust中声明包的关键字是mod
,如果是公共的,则需要声明为pub mod
。
rust中,每个文件都是一个包,文件名就是包名。如果是和main.rs
同级的文件,可以直接使用文件名作为包名。如果有多级目录,那么每个目录下,都要有一个mod.rs
作为包的入口,这点类似于python的__init__.py
文件;区别在于,rust的mod.rs
文件中需要显式地说明当前目录下的包名,以及是否是pub
类型的。
下面给出一个代码结构实例:
从里往外分析,每个文件的内容如下:
ak.rs
pub mod ak_47 {
pub fn fire() {
println!("AK-46 fire");
}
}
mod.rs,这是long_gun
的入口文件:
pub mod ak; // 声明当前的包中有ak
my_gun.rs
pub fn my_gun1_fire() {
println!("my_gun fire");
}
mod.rs,和my_gun.rs
同级别的:
pub mod my_gun;
pub mod long_gun;
car.rs
pub mod ferrari {
pub fn run() {
println!("ferrari run");
}
}
pub mod bmw {
pub fn run() {
println!("bmw run");
}
}
main.rs,这是程序的入口,注意不同的引用方式:
mod car;
use car::bmw;
mod gun;
use car::ferrari as f;
fn main() {
car::ferrari::run();
f::run();
bmw::run();
gun::my_gun::my_gun1_fire();
gun::long_gun::ak::ak_47::fire();
}
最后的输出结果是:
ferrari run
ferrari run
bmw run
my_gun fire
AK-46 fire