rust笔记7 rust中的包管理
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