逻辑代码组称为模块,如, network 模块包含与网络相关的函数,而 graphics 模块包含与绘图相关的函数,模块类似于其他编程语言中的名称空间,可以使用 crates.io 第三模块。
Sr.No | Term & Remark |
---|---|
1 | crate 是Rust的编译单元; |
2 | cargo 用于包装箱的官方Rust软件包管理工具。 |
3 | moule 从逻辑上将代码分组到一个条板箱中。 |
4 | 官方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 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 模块中,该模块进一步嵌套在 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。
创建一个文件夹 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
[package] name="movies_lib" version="0.1.0" authors=["Mohtashim"]
将以下模块定义添加到该文件。
pub mod movies;
上一行创建了一个公共模块-movies。
该文件将定义电影模块的所有函数。
pub fn play(name:String){ println!("Playing movie {} :movies-app",name); }
上面的代码定义了一个函数 play(),该函数接受一个参数并将其打印到控制台。
使用 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
在movie-app文件夹中创建另一个文件夹 movie-lib-test ,然后创建Cargo.toml文件和src文件夹,该项目应具有main方法,在src文件夹中创建一个main.rs文件,文件夹结构如下所示。
movie-app movie-lib //已经完成 movie-lib-test/ -->Cargo.toml -->src/ main.rs
[package] name="test_for_movie_lib" version="0.1.0" authors=["Mohtashim"] [dependencies] movies_lib={ path="../movie-lib" }
注意-将库文件夹的路径设置为依赖项。下图显示了两个项目的内容。
extern crate movies_lib; use movies_lib::movies::play; fn main() { println!("inside main of test "); play("Learnfk".to_string()) }
上面的代码导入了一个名为movie_lib的外部软件包,检查当前项目的Cargo.toml以验证包名称。
我们将使用cargo build 和cargo run 来建造二进制项目并执行,如下所示-
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)