Rust 模块文件系统解析和用法

模块形成了层次结构, 因此项目变得更加易于理解。 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文件系统

如果模块包含许多功能并且这些功能非常冗长, 则很难找到特定功能的代码。 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中。

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?