文件系统

2025年3月17日 | 阅读 3 分钟

模块形成一个层次结构,使项目更易于理解。 Rust 模块系统用于以某种方式分割多个文件,使并非所有内容都位于 src/lib.rs 或 src/main.rs 文件中。

文件名: src/lib.rs

在上面的例子中,一个程序由三个模块组成,即 A、B 和 C。C 是 B 模块的内部模块。

给定文件的模块层次结构是


Rust Filesystem

如果模块包含许多函数,并且函数非常冗长,那么找到特定函数的代码就会变得困难。 Rust 通过提供模块系统提供了灵活性。 我们可以为每个模块创建一个单独的文件,而不是放在同一个文件,即 src/lib.rs 中。

要遵循的步骤

首先,用分号替换模块 'A' 的代码块。

分号 ; 告诉 Rust 在另一个位置查找模块 'A' 的定义,该定义定义了模块 'A' 的范围。

  • mod A; 看起来像

现在创建包含模块 A 定义的外部文件。 外部文件的名称将命名为 src/A.rs。 创建文件后,在该文件中编写模块 A 的定义,该定义先前已被删除。

文件名: src/A.rs。

在这种情况下,我们不需要编写 mod 声明,正如我们在 src/lib.rs 文件中提到的那样。 并且,如果我们在那里编写 mod 声明,那么它将成为模块 A 的子模块。

Rust 默认情况下会查找 src/lib.rs 文件,然后此文件确定要进一步查找哪个文件。

现在,我们将从文件 src/lib.rs 中提取模块 B,并用分号替换模块 B 的主体。

文件名: src/lib.rs

  • mod B; 看起来像

现在创建包含模块 B 定义的外部文件。 外部文件的名称将命名为 src/B.rs。 创建文件后,在该文件中编写模块 B 的定义,该定义先前已被删除。

文件名: src/B.rs

现在我们将从文件 src/B.rs 中提取模块 C,并用分号替换模块 C 的主体。

  • mod C; 看起来像

现在创建包含模块 C 定义的外部文件。 外部文件的名称将命名为 src/C.rs。 创建文件后,在该文件中编写模块 C 的定义,该定义先前已被删除。

文件名: src/C.rs

注意:从模块 B 中提取模块 C 将导致编译错误,因为 src/B.rs 与 src/lib.rs 不同。 因此,需要将 src/B.rs 移动到一个新目录中,并重命名为 src/B/mod.rs,然后将子模块移到新的 'B' 目录中。

模块文件系统规则

  • 如果模块名为 "server" 并且没有子模块,则模块的所有声明都可以放在文件 server.rs 中。
  • 如果模块名为 "server" 包含子模块,则该模块的所有声明都将放在文件 server/mod.rs 中。