模块形成层次结构,使项目变得更容易理解。 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
范围的位置。
模块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.
}
注意:从模块B中提取模块C将导致编译错误,因为
src/B.rs
与src/lib.rs
不同。 因此,src/B.rs
将被移动到一个新目录并重命名为src/B/mod.rs
,然后将子模块移动到新的B
目录中。
模块文件系统规则:
- 如果模块名为“server”且没有子模块,则模块的所有声明都可以放在文件
server.rs
中。 - 如果名为“server”的模块包含子模块,则模块的所有声明都将放在文件
server/mod.rs
中。