网站首页 > 资源文章 正文
逻辑代码组成为模块。
多个模块被编译成一个称为 crate 的单元。
概念
- crate
- Cargo
- module
- crates.io
crate:
- Rust程序可能包含一个二进制 crate 或一个库 crate 。
- 二进制 crate 是一个具有 main()方法的可执行文件。
- 库 crate 是一组可以在其他项目中重用的组件。与二进制 crate 不同,库crate 没有入口点(main() 方法)。
cargo:
- Cargo工具是用来管理Rust 的crates 。
module:
- 在一个crate中对代码进行逻辑分组
- 例如,网络模块包含网络相关功能,图形模块包含与绘图相关的功能。模块类似于其他编程语言中的命名空间。
crates.io:
- 官方Rust 包(crate)仓库.
- 第三方crates可从crates.io 下载获取。
模块语法:
// 公开的模块
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("天龙八部".to_string());
}
输出结果:
Playing movie 天龙八部
Use 关键词
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("天龙八部 ".to_string());
}
输出:
Playing movie 天龙八部
嵌套模块
模块也可以嵌套。comedy 模块嵌套在 english 模块中,后者进一步嵌套在 movies模块中。
下面给出的示例定义了movies/english/comedy模块中的函数播放
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() {
// short path syntax
play("天龙八部".to_string());
play("战狼".to_string());
//full path syntax
movies::english::comedy::play("飞上云霄".to_string());
}
输出结果:
Playing comedy movie 天龙八部
Playing comedy movie 战狼
Playing comedy movie 飞上云霄
创建一个库crate 并在二进制crate 中使用
让我们创建一个名为movie_lib的库,其中包含一个movies模块.
第一步: 创建应用.
创建目录movie-app
D:\demo\rust\movie-app>cargo new movie-lib --lib
Created library `movie-lib` package
D:\demo\rust\movie-app>
目录结构是这样的.
movie-app
movie-lib/
-->Cargo.toml
-->src/
lib.rs
movies.rs
第二步: 编辑Cargo.toml 编辑项目元数据.
[package]
name = "movie-lib"
version = "0.1.0"
authors = ["aron9g <llc_xyz@qq.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
第三步: 编辑 lib.rs 文件.
添加以下行到文件lib.rs
pub mod movies;
以上指令创建了一个公共模块: movies
第四步: 编辑movies.rs 文件
pub fn play(name:String){
println!("Playing movie {} :movies-app",name);
}
上面的代码定义了一个函数play(),它接受一个参数并将其打印到控制台
第五步: 构建库 crate.
使用cargo build命令构建应用程序,以验证库crate的结构是否正确。确保您位于项目的根目录-电影应用程序文件夹。如果构建成功,终端将显示以下消息:
D:\demo\rust\movie-app\movie-lib>cargo build
Compiling movie-lib v0.1.0 (D:\demo\rust\movie-app\movie-lib)
Finished dev [unoptimized + debuginfo] target(s) in 0.26s
第六步: 创建一个测试程序
在movie app文件夹后创建另一个文件夹movie-lib-test , Cargo.toml文件和src文件夹。这个项目应该有main方法,因为这是一个二进制crate,
D:\demo\rust\movie-app>cargo new movie-lib-test --bin
Created binary (application) `movie-lib-test` package
文件夹结构如图所示:
movie-app
movie-lib
// already completed
movie-lib-test/
-->Cargo.toml
-->src/
main.rs
第七步: 添加依赖. 编辑Cargo.toml
在movie-lib-test 项目的cargo.toml文件下.
[package]
name = "movie-lib-test"
version = "0.1.0"
authors = ["aron9g <llc_xyz@qq.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
movie_lib = { path = "../movie-lib" }
库文件夹的路径设置为依赖项。下图显示了这两个项目的内容
第八步: 编辑main.rs
extern crate movie_lib;
use movie_lib::movies::play;
fn main() {
println!("inside main of test ");
play("星球大战".to_string())
}
第九步: 构建并运行:
cargo run
输出结果:
D:\demo\rust\movie-app\movie-lib-test>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\movie-lib-test.exe`
inside main of test
Playing movie 星球大战 :movies-app
往期回顾:
今天不知怎么发不了往期文章链接,查看往期,点我头像.
- 上一篇: 使用POI进行写操作(poi写数据)
- 下一篇: 「干货」货代专业词汇整理(一)(货代专业术语大全)
猜你喜欢
- 2024-11-03 Go 每日一库之 sqlc:根据 sql 生成代码
- 2024-11-03 「干货」货代专业词汇整理(一)(货代专业术语大全)
- 2024-11-03 使用POI进行写操作(poi写数据)
- 2024-11-03 「整理」390种外贸单证名称中英文互译大全
- 2024-11-03 系动词come和go的用法(系动词come和go的用法与例举)
- 2024-11-03 JavaSE基础-包(javase入门)
- 2024-11-03 100个常用生活物品的英文名称,值得收藏!
- 2024-11-03 The Gifts (礼物)4人英文话剧剧本
- 2024-11-03 为什么我找不到快捷键驱动程序(ATKACPI)
- 2024-11-03 Apache—DBUtils(apache dbutils jar)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)