📅  最后修改于: 2020-11-02 04:19:29             🧑  作者: Mango
逻辑代码组称为模块。多个模块被编译成一个称为crate的单元。 Rust程序可能包含二进制条板箱或库条板箱。二进制条板箱是具有main()方法的可执行项目。库箱是一组可以在其他项目中重用的组件。与二进制条板箱不同,库条板箱没有入口点(main()方法)。货物工具用于管理Rust中的箱子。例如,网络模块包含与网络相关的功能,图形模块包含与绘图相关的功能。模块类似于其他编程语言中的名称空间。可以使用crates.io中的货物下载第三方包装箱。
Sr.No | Term & Description |
---|---|
1 |
crate Is a compilation unit in Rust; Crate is compiled to binary or library. |
2 |
cargo The official Rust package management tool for crates. |
3 |
module Logically groups code within a crate. |
4 |
The official Rust package registry. |
//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关键字为前缀以使其公开。公共模块中的功能也必须公开。
该示例定义了一个公共模块-电影。该模块包含一个函数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
模块也可以嵌套。喜剧模块嵌套在英语模块中,而英语模块又嵌套在电影模块中。下面给出的示例定义了电影/英语/喜剧模块内部的函数播放。
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库箱,其中包含一个模块的电影。要构建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;
上面的代码创建了一个公共模块-电影。
该文件将定义电影模块的所有功能。
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
// already completed
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("Tutorialspoint".to_string())
}
上面的代码导入了一个名为movies_lib的外部软件包。检查当前项目的Cargo.toml以验证包装箱名称。
我们将使用货物建造和货物运行来建造二进制项目并执行,如下所示-