模块形成了层次结构, 因此项目变得更加易于理解。 Rust模块系统用于拆分多个文件, 使得并非所有内容都位于src / lib.rs或src / main.rs文件中。
文件名:src / lib.rs
mod A
{
fn a()
{
// block of statements.
}
}
mod B
{
fn b()
{
// block of statements.
}
mod C
{
fn c()
{
// block of statements.
}
}
}
在以上示例中, 程序由三个模块组成, 即A, B和C。C是B模块的内部模块。
给定文件的模块层次结构为:
如果模块包含许多功能并且这些功能非常冗长, 则很难找到特定功能的代码。 Rust通过提供模块系统来提供灵活性。我们可以为每个模块有一个单独的文件, 而不是放在同一个文件中, 即src / lib.rs。
应遵循的步骤
首先, 用分号替换模块” A”的块。
mod A;
mod B
{
fn b()
{
// block of statements.
}
mod C
{
fn c()
{
// block of statements.
}
}
}
分号;告诉Rust在定义模块” A”范围的另一个位置找到模块” A”的定义。
- mod A;好像:
mod A
{
fn a()
{
// block of statements.
}
}
现在, 创建包含模块A定义的外部文件。外部文件的名称将命名为src / A.rs。创建文件后, 在此文件中写入模块A的定义, 该定义先前已删除。
文件名:src / A.rs。
fn a()
{
// block of statements.
}
在这种情况下, 我们不需要编写src / lib.rs文件中提到的mod声明。并且, 如果我们在此处编写mod声明, 则它将成为模块A的子模块。
Rust默认情况下会查看src / lib.rs文件, 然后此文件确定要进一步查找的文件。
现在, 我们将从文件src / lib.rs中提取模块B, 并用分号替换模块B的主体。
文件名:src / lib.rs
mod A;
mod B;
- mod B;好像:
mod B
{
fn b()
{
// block of statements.
}
mod C
{
fn c()
{
// block of statements.
}
}
}
现在, 创建包含模块B定义的外部文件。外部文件的名称将命名为src / B.rs。创建文件后, 在该文件中写入模块B的定义, 这些定义先前已删除。
文件名:src / B.rs
fn b()
{
// block of statements.
}
mod C
{
fn c()
{
// block of statements.
}
}
现在, 我们将从文件src / B.rs中提取模块C, 并用分号替换模块C的主体。
fn b()
{
// block of statements.
}
mod C;
- mod C;好像:
mod C
{
fn c()
{
// block of statements.
}
}
现在, 创建包含模块C定义的外部文件。外部文件的名称将命名为src / C.rs。创建文件后, 在此文件中写入模块C的定义, 该定义先前已删除。
文件名:src / C.rs
fn c()
{
// block of statements.
}
注意:因为src / B.rs与src / lib.rs不同, 所以从模块B中提取模块C会导致编译错误。因此, 将src / B.rs移至新目录并重命名为src / B / mod.rs, 然后将子模块移至新的” B”目录。
模块文件系统规则:
- 如果模块名为” server”并且没有子模块, 则该模块的所有声明都可以放置在文件server.rs中。
- 如果名为” server”的模块包含子模块, 则该模块的所有声明都将放置在文件server / mod.rs中。