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

能否为Rust模块采用扁平化文件系统结构?

实现Rust扁平化文件结构的模块调用方案

当然可以实现全扁平化的文件系统结构,核心是让所有子模块直接对应src目录下的单独.rs文件,并且在入口文件(比如main.rs)中统一声明这些模块,再通过正确的路径和可见性设置实现模块间的互相调用。

具体实现步骤

  1. 文件结构
    把所有子模块文件直接放在src目录下,不需要创建子目录:

    src/
    ├── main.rs
    ├── module_a.rs
    └── module_b.rs
    
  2. 在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();
    }
    
  3. 模块间互相调用的关键设置
    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!");
      }
      

你之前编译失败的常见原因

  • 没有给要跨模块调用的函数/结构体/常量加上pub修饰,导致无法访问私有项;
  • 路径引用错误:如果用相对路径(比如super::)需要确保层级正确,而扁平化结构下用crate::从根路径引用是最稳妥的方式。

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:17:12