Rust的module系统比较复杂繁琐不直观, 和常见语言的import方式差别很大. 我理解Cargo对Rust的module的处理更加类似于c/c++的include. 所有文件都要在crate的root文件(main.rs/lib.rs)显示引用. 然后其他文件才可以使用. 例子如下
├── Cargo.lock
├── Cargo.toml
├── src
│ ├── a.rs
│ ├── b.rs
│ └── main.rs
////////// main.rs
mod a;
mod b; // 这里必须显示引入b. 即使在main.rs范围内看, b并没有被直接使用. 但是Cargo没有处理循环递归, Cargo编译只认crate root文件.
fn main() {
println!("Hello, world!");
}
///////// a.rs
// mod b; // 这里不能类似main.rs文件那样引入b. 因为只有crate root文件可以这样做.
use crate::b; // 绝对路径声明使用b. 因为main.rs已经引入了.
pub fn testa(){
b::testb();
}
///////////// b.rs
pub fn testb(){
println!("b");
}
原文:https://www.cnblogs.com/shouzhuo/p/14883072.html