- 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 - 模块
逻辑代码组称为模块。多个模块被编译成一个称为crate的单元。Rust 程序可能包含二进制包或库包。二进制包是一个具有main()方法的可执行项目。库箱是一组可以在其他项目中重用的组件。与二进制 crate 不同,库 crate 没有入口点(main() 方法)。Cargo 工具用于管理 Rust 中的 crate。例如,网络模块包含网络相关功能,图形模块包含绘图相关功能。模块类似于其他编程语言中的命名空间。可以使用crates.io上的 Cargo 下载第三方 crates 。
| 先生编号 | 术语和描述 |
|---|---|
| 1 | 箱 是Rust中的编译单元;Crate 被编译为二进制文件或库。 |
| 2 | 货物 用于 crate 的官方 Rust 包管理工具。 |
| 3 | 模块 按逻辑将代码分组到一个 crate 中。 |
| 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关键字作为前缀以使其公开。公共模块中的函数也必须公开。
插图:定义模块
该示例定义了一个公共模块 - movie。该模块包含一个函数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
嵌套模块
模块也可以嵌套。喜剧模块嵌套在英语模块中,英语模块进一步嵌套在电影模块中。下面给出的示例定义了movie/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!
插图 - 创建 Library Crate 并在二进制 Crate 中使用
让我们创建一个名为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;
上面的行创建了一个公共模块 - movie。
第 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
// 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 以验证 crate 名称。
第 9 步 - 使用货物构建和货物运行
我们将使用cargo build和cargo run来构建二进制项目并执行它,如下所示 -