能否为Rust模块采用扁平化文件系统结构?
实现Rust扁平化文件结构的模块调用方案
当然可以实现全扁平化的文件系统结构,核心是让所有子模块直接对应src目录下的单独.rs文件,并且在入口文件(比如main.rs)中统一声明这些模块,再通过正确的路径和可见性设置实现模块间的互相调用。
具体实现步骤
文件结构
把所有子模块文件直接放在src目录下,不需要创建子目录:src/ ├── main.rs ├── module_a.rs └── module_b.rs在main.rs中声明模块
在入口文件里用mod关键字声明所有子模块,Rust会自动关联同目录下同名的.rs文件:// main.rs // 声明两个子模块,对应同目录的module_a.rs和module_b.rs mod module_a; mod module_b; fn main() { module_a::say_hello(); module_b::say_greet(); }模块间互相调用的关键设置
Rust模块内的项默认是私有(private)的,要让其他模块能调用,必须给目标项加上pub修饰符,然后通过crate根路径(crate::模块名::项)来引用:- 示例:module_a.rs调用module_b的内容
// module_a.rs pub fn say_hello() { println!("Hello from Module A!"); // 从crate根路径引用module_b的pub函数 crate::module_b::say_greet(); } - module_b.rs的内容
// module_b.rs pub fn say_greet() { println!("Greetings from Module B!"); }
- 示例:module_a.rs调用module_b的内容
你之前编译失败的常见原因
- 没有给要跨模块调用的函数/结构体/常量加上
pub修饰,导致无法访问私有项; - 路径引用错误:如果用相对路径(比如
super::)需要确保层级正确,而扁平化结构下用crate::从根路径引用是最稳妥的方式。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

