You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust跨文件共享函数:避免嵌套目录与文件重复的实现方案

解决Rust项目中共享根目录模块的问题

我明白你现在的困扰——想让src/zzz.rs作为根目录下的公共模块,供aaa.rs和bbb.rs调用,却被编译器逼着把它放到子目录里重复文件。其实问题出在Rust的模块查找规则上,咱们来调整一下代码就能搞定:

核心思路

Rust里,如果你在某个子模块(比如aaa.rs)里写mod zzz;,编译器会默认去src/aaa/zzz.rs找对应的文件,这就是它报错的原因。要让zzz.rs成为整个项目的公共模块,你需要在**根模块(main.rs)**里声明它,然后其他子模块通过crate的全局路径来引用它。

修改后的代码示例

  1. src/main.rs:添加mod zzz;,把zzz注册为顶级子模块
mod aaa;
mod bbb;
mod zzz; // 在这里声明,让zzz成为crate的顶级模块
fn main() {
    aaa::do_something();
    bbb::do_something_else();
}
  1. src/aaa.rs:移除mod zzz;,改用crate::zzz访问公共模块
// 删掉原来的mod zzz;
pub fn do_something() {
    // 直接通过crate的全局路径调用
    crate::zzz::do_stuff();
    // 或者先导入再用:
    // use crate::zzz;
    // zzz::do_stuff();
}
  1. src/bbb.rs:和aaa.rs做同样的修改
// 删掉原来的mod zzz;
pub fn do_something_else() {
    crate::zzz::do_stuff();
}
  1. src/zzz.rs:保持不变,确保函数是pub的就行
pub fn do_stuff() {
    // 你的业务逻辑
}

这样修改后,zzz.rs就留在src根目录下,aaa.rs和bbb.rs都能正常调用它的函数,不需要重复文件啦。

内容的提问来源于stack exchange,提问作者A. S. Underwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:04:00