Rust模块(Modules)

/ / Rust模块(Modules)

逻辑代码组称为模块,如, network 模块包含与网络相关的函数,而 graphics 模块包含与绘图相关的函数,模块类似于其他编程语言中的名称空间,可以使用 crates.io 第三模块。

Sr.NoTerm & Remark
1

是Rust的编译单元;

无涯教程网

2

cargo

用于包装箱的官方Rust软件包管理工具。

3

moule

从逻辑上将代码分组到一个条板箱中。

4

crates.io

官方Rust包注册表。

模块语法

//公共模块
pub mod a_public_module {
   pub fn a_public_function() {
      //公共函数
   }
   fn a_private_function() {
      //私有函数
   }
}
//私有模块
mod a_private_module {
   fn a_private_function() {
   }
}

模块可以是公共的或私有的,专用模块中的组件不能被其他模块访问,默认情况下,Rust中的模块是私有的,相反,公共模块中的函数可以被其他模块访问,模块应使用 pub 关键字作为前缀以使其公开,公共模块中的函数也必须公开。

定义模块

该示例定义了一个公共模块-Movies。该模块包含一个 play()函数,该函数接受参数并输出其值。

pub mod movies {
   pub fn play(name:String) {
      println!("Playing movie {}",name);
   }
}
fn main(){
   movies::play("Herold and Kumar".to_string());
}
Playing movie Herold and Kumar

use关键字

use 关键字有助于导入公共模块。

use public_module_name::function_name;

use示例

pub mod movies {
   pub fn play(name:String) {
      println!("Playing movie {}",name);
   }
}
use movies::play;
fn main(){
   play("Herold and Kumar ".to_string());
}
Playing movie Herold and Kumar

嵌套模块

模块也可以嵌套,comedy模块嵌套在 english 模块中,该模块进一步嵌套在 movies 模块中,下面的示例在 movies/english/comedy 模块中定义了 play 函数

pub mod movies {
   pub mod english {
      pub mod comedy {
         pub fn play(name:String) {
            println!("Playing comedy movie {}",name);
         }
      }
   }
}
use movies::english::comedy::play; 
//导入公共模块

fn main() {
   //短路径语法
   play("Herold and Kumar".to_string());
   play("The Hangover".to_string());

   //full path syntax
   movies::english::comedy::play("Airplane!".to_string());
}
Playing comedy movie Herold and Kumar
Playing comedy movie The Hangover
Playing comedy movie Airplane!

创建第三方库

让我们创建一个名为movie_lib的库条板箱,其中包含Movies模块,要构建movie_lib库箱,我们将使用工具cargo。

步骤1 -  创建目录

创建一个文件夹 movie-app ,然后创建一个子文件夹 movie-lib ,创建文件夹和子文件夹后,在此目录中创建 src 文件夹和Cargo.toml文件,源代码应放在 src文件夹中,在src文件夹中创建文件lib.rs和movie.rs, Cargo.toml 文件将包含项目的元数据,如版本号,作者名称等。

项目目录结构如下所示-

movie-app
   movie-lib/
      -->Cargo.toml
      -->src/
         lib.rs
         movies.rs

步骤2 -  编辑Cargo.toml文件

[package]
name="movies_lib"
version="0.1.0"
authors=["Mohtashim"]

步骤3 -  编辑lib.rs文件。

将以下模块定义添加到该文件。

pub mod movies;

上一行创建了一个公共模块-movies。

步骤4 -  编辑movie.rs文件

该文件将定义电影模块的所有函数。

pub fn play(name:String){
   println!("Playing movie {} :movies-app",name);
}

上面的代码定义了一个函数 play(),该函数接受一个参数并将其打印到控制台。

步骤5 -  创建库

使用 cargo build 命令构建应用,以验证库的结构是否正确,确保您位于项目的根目录-movie-app文件夹,如果构建成功,将在终端中显示以下消息。

D:\Rust\movie-lib> cargo build
   Compiling movies_lib v0.1.0 (file:///D:/Rust/movie-lib)
   Finished dev [unoptimized + debuginfo] target(s) in 0.67s

步骤6 -  创建测试应用

在movie-app文件夹中创建另一个文件夹 movie-lib-test ,然后创建Cargo.toml文件和src文件夹,该项目应具有main方法,在src文件夹中创建一个main.rs文件,文件夹结构如下所示。

movie-app
   movie-lib 
   //已经完成

   movie-lib-test/
      -->Cargo.toml
      -->src/
         main.rs

步骤7 -  编辑Cargo.toml文件

[package]
name="test_for_movie_lib"
version="0.1.0"
authors=["Mohtashim"]

[dependencies]
movies_lib={ path="../movie-lib" }

注意-将库文件夹的路径设置为依赖项。下图显示了两个项目的内容。

Cargo Toml File

步骤8 -  编辑main.rs文件

extern crate movies_lib;
use movies_lib::movies::play;
fn main() {
   println!("inside main of test ");
   play("Learnfk".to_string())
}

上面的代码导入了一个名为movie_lib的外部软件包,检查当前项目的Cargo.toml以验证包名称。

步骤9 -  Cargo build 和 cargo run

我们将使用cargo build 和cargo run 来建造二进制项目并执行,如下所示-

cargo run

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

后端工程师的高阶面经 -〔邓明〕

手把手教你落地DDD -〔钟敬〕

JavaScript进阶实战课 -〔石川〕

人人都用得上的写作课 -〔涵柏〕

视觉笔记入门课 -〔高伟〕

Kafka核心源码解读 -〔胡夕〕

DevOps实战笔记 -〔石雪峰〕

重学前端 -〔程劭非(winter)〕

赵成的运维体系管理课 -〔赵成〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者