Rust 模块分文件
初试 Rust 时,对它的 mod 机制很蒙蔽,特别是习惯了 Go 的包机制后。
其实站在编译器的角度来思考就清晰多了。
Rust 编译器只接受 【一个】
.rs
文件作为输入,并且只生成一个crate。
所以在 src/main.rs
中,我们使用 mod video;
告诉编译器去在当前位置查找 video.rs
或 ./video/mod.rs
。
如,以下目录结构:
$ tree -L 3 src
src
├── main.rs
└── video
├── file.rs
├── mod.rs
└── worker.rs
在此项目中 main.rs
作为入口文件,然后在 main.rs
中定义 video
模块:
/// src/main.rs
mod video;
fn main() {
video::do_work();
}
于是编译器找到 video/mod.rs
文件:
// 将此mod下的 worker mod (文件:video/worker.rs) 中的 say()函数 发布到与当前同级别的空间(外部可以 video::say() 的方式调用)
pub use self::worker::say;
// 告诉编译器去当前目录下找 `file.rs` 或 `file/mod.rs`
pub mod file;
pub mod worker;
pub fn do_work() {
let files = file::all_files();
for f in files.iter() {
println!("得到文件:{}", f.file_name().to_str().unwrap());
worker::dowork(f);
}
}