Rust跨文件共享函数:避免嵌套目录与文件重复的实现方案
解决Rust项目中共享根目录模块的问题
我明白你现在的困扰——想让src/zzz.rs作为根目录下的公共模块,供aaa.rs和bbb.rs调用,却被编译器逼着把它放到子目录里重复文件。其实问题出在Rust的模块查找规则上,咱们来调整一下代码就能搞定:
核心思路
Rust里,如果你在某个子模块(比如aaa.rs)里写mod zzz;,编译器会默认去src/aaa/zzz.rs找对应的文件,这就是它报错的原因。要让zzz.rs成为整个项目的公共模块,你需要在**根模块(main.rs)**里声明它,然后其他子模块通过crate的全局路径来引用它。
修改后的代码示例
- src/main.rs:添加
mod zzz;,把zzz注册为顶级子模块
mod aaa; mod bbb; mod zzz; // 在这里声明,让zzz成为crate的顶级模块 fn main() { aaa::do_something(); bbb::do_something_else(); }
- src/aaa.rs:移除
mod zzz;,改用crate::zzz访问公共模块
// 删掉原来的mod zzz; pub fn do_something() { // 直接通过crate的全局路径调用 crate::zzz::do_stuff(); // 或者先导入再用: // use crate::zzz; // zzz::do_stuff(); }
- src/bbb.rs:和aaa.rs做同样的修改
// 删掉原来的mod zzz; pub fn do_something_else() { crate::zzz::do_stuff(); }
- src/zzz.rs:保持不变,确保函数是pub的就行
pub fn do_stuff() { // 你的业务逻辑 }
这样修改后,zzz.rs就留在src根目录下,aaa.rs和bbb.rs都能正常调用它的函数,不需要重复文件啦。
内容的提问来源于stack exchange,提问作者A. S. Underwood
相关产品推荐
相关产品推荐

