rust 模块

rust 模块

1.Rust 为我们提供了强大的包管理工具:

  • 项目(Package):可以用来构建、测试和分享包

  • 工作空间(WorkSpace):对于大型项目,可以进一步将多个包联合在一起,组织成工作空间

  • 包(Crate):一个由多个模块组成的树形结构,可以作为三方库进行分发,也可以生成可执行文件进行运行

  • 模块(Module):可以一个文件多个模块,也可以一个文件一个模块,模块可以被认为是真实项目中的代码组织单元

1.package:

对于 Rust 而言,包是一个独立的可编译单元,它编译后会生成一个可执行文件或者一个库。
一个包会将相关联的功能打包在一起,使得该功能可以很方便的在多个项目中分享。例如标准库中没有提供但是在三方库中提供的 rand 包,它提供了随机数生成的功能,我们只需要将该包通过 use rand; 引入到当前项目的作用域中,就可以在项目中使用 rand 的功能:rand::XXX。

2.项目 Package

鉴于 Rust 团队标新立异的起名传统,以及包的名称被 crate 占用,库的名称被 library 占用,经过斟酌, 我们决定将 Package 翻译成项目,你也可以理解为工程、软件包。
由于 Package 就是一个项目,因此它包含有独立的 Cargo.toml 文件,以及因为功能性被组织在一起的一个或多个包。一个 Package 只能包含一个库(library)类型的包,但是可以包含多个二进制可执行类型的包。
创建了模块,有几点需要注意的:

  • 使用 mod 关键字来创建新模块,后面紧跟着模块名称
  • 模块可以嵌套
  • 模块中可以定义各种 Rust
    类型,例如函数、结构体、枚举、特征等

3. crate

该模块位于包的树形结构(由模块组成的树形结构)的根部

4 父子模块

如果模块 A 包含模块 B,那么 A 是 B 的父模块,B 是 A 的子模块。
想要调用一个函数,就需要知道它的路径,在 Rust 中,这种路径有两种形式:

  • 绝对路径,从包根开始,路径名以包名或者 crate 作为开头
  • 相对路径,从当前模块开始,以 self,super
    或当前模块的标识符作为开头

self 其实就是引用自身模块中的项
super 代表的是父模块为开始的引用方式,非常类似于文件系统中的 … 语法

Rust模块化

模块化有助于代码的管理和层次逻辑的清晰
Rust模块化有多种方式:
1.嵌套模块
嵌套模块就是直接在要使用模块的文件中声明模块

mod 模块名称{//声明模块   
........
}

use 模块名称;//使用模块中的内容

fn main()
 {
........
调用模块
.........
}

2.文件模块
一个.rs文件就是一个和文件同名的模块,在使用的地方要声明模块
3.目录模块
有两种实现方式:
1.2015写法:

在模块目录下添加并编辑 mod.rs文件

cake.rs:
pub struct Cake;
pizza.rs
pub struct Pizza;
smoothoe.rs
pub struct Smoothoe;
mod.rs
pub mod cake;pub mod pizza;pub mod smoothoe;use self::cake::Cake;impl Cake {    pub fn judge(){        println!("cake is sweet");    }}
main.rs
mod food;use food::cake::Cake;fn main() {    Cake::judge();}

2018写法:
在调用的目录下添加并编辑与目录名相同的rs文件

cake.rs:
pub struct Cake;
pizza.rs
pub struct Pizza;
smoothoe.rs
pub struct Smoothoe;
food.rs
pub mod cake;pub mod pizza;pub mod smoothoe;use self::cake::Cake;impl Cake {    pub fn judge(){        println!("cake is sweet");    }}
main.rs
mod food;use food::cake::Cake;fn main() {    Cake::judge();}

可以参考 https://zhuanlan.zhihu.com/p/350968196

你可能感兴趣的:(rust,开发语言,后端)