无涯教程-Rust - 模块(Modules)

45 阅读3分钟

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

Sr.No Term & 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

参考链接

www.learnfk.com/rust/rust-m…