Rust - 模块(Modules)

Rust - 模块(Modules) 首页 / Rust入门教程 / Rust - 模块(Modules)

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

Sr.NoTerm & Remark
1

crate

是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实战课 -〔欧创新〕

后端技术面试 38 讲 -〔李智慧〕

小马哥讲Spring核心编程思想 -〔小马哥〕

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

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

To B市场品牌实战课 -〔曹林〕

A/B测试从0到1 -〔张博伟〕

AI 应用实战课 -〔黄佳〕

Midjourney入门实践课 -〔Jovi〕

好记忆不如烂笔头。留下您的足迹吧 :)