- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境设置
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 模块
一个逻辑代码组称为模块。多个模块编译成一个称为包的单元。Rust 程序可能包含一个二进制包或一个库包。二进制包是一个具有main()方法的可执行项目。库包是可以重用于其他项目的组件组。与二进制包不同,库包没有入口点(main() 方法)。Cargo 工具用于管理 Rust 中的包。例如,network模块包含网络相关函数,graphics模块包含绘图相关函数。模块类似于其他编程语言中的命名空间。可以使用 cargo 从crates.io下载第三方包。
序号 | 术语和描述 |
---|---|
1 | 包 是 Rust 中的编译单元;包编译为二进制文件或库。 |
2 | cargo 用于包的官方 Rust 包管理工具。 |
3 | 模块 在包内逻辑地对代码进行分组。 |
4 |
官方的 Rust 包注册表。 |
语法
//public module pub mod a_public_module { pub fn a_public_function() { //public function } fn a_private_function() { //private function } } //private module 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 public_module_name::function_name;
示例
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模块中,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; // importing a public module fn main() { // short path syntax 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和movies.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 - 编辑movies.rs文件
此文件将定义movies模块的所有函数。
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 // already completed 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" }
注意 - 库文件夹的路径设置为依赖项。下图显示了这两个项目的內容。
步骤 8 - 将以下内容添加到main.rs文件中
extern crate movies_lib; use movies_lib::movies::play; fn main() { println!("inside main of test "); play("Tutorialspoint".to_string()) }
以上代码导入了一个名为movies_lib的外部包。检查当前项目的Cargo.toml以验证包名称。
步骤 9 - 使用cargo build和cargo run
我们将使用cargo build和cargo run来构建二进制项目并执行它,如下所示 -