alarmevaluator的作用 armoury crate有什么作用_rust

8.1 包和 Crate

8.1.1 基本概念

  • crate 是 Rust 在编译时最小的代码单位;crate 有两种形式:二进制项(可以被编译为可执行程序)和库(没有 main 函数,也不会编译为可执行程序,而是提供一些诸如函数之类的东西,使其他项目也能使用这些东西)
  • **包(package)**是提供一系列功能的一个或者多个 crate;中可以包含至多一个库 crate(library crate),也可以包含任意多个二进制 crate(binary crate),但是必须至少包含一个 crate(无论是库的还是二进制的)

alarmevaluator的作用 armoury crate有什么作用_rust_02

8.2 模块的作用域与私有性

8.2.1 模块的相关概念

alarmevaluator的作用 armoury crate有什么作用_作用域_03


alarmevaluator的作用 armoury crate有什么作用_后端_04

8.2.1 使用模块对相关代码进行分组

alarmevaluator的作用 armoury crate有什么作用_rust_05


alarmevaluator的作用 armoury crate有什么作用_后端_06

8.3 模块的路径

8.3.1 绝对路径与相对路径

alarmevaluator的作用 armoury crate有什么作用_rust_07


alarmevaluator的作用 armoury crate有什么作用_开发语言_08

8.3.2 使用 pub 关键字暴露路径

  • 模块公有并不使其内容也是公有的:模块上的 pub 关键字只允许其父模块引用它,而不允许访问内部代码;模块是一个容器,只是将模块变为公有能做的其实并不太多,同时需要更深入地选择将一个或多个项变为公有(即添加 pub 前缀)

alarmevaluator的作用 armoury crate有什么作用_开发语言_09


alarmevaluator的作用 armoury crate有什么作用_开发语言_10


alarmevaluator的作用 armoury crate有什么作用_rust_11

8.3.3 使用 super 起始的相对路径

alarmevaluator的作用 armoury crate有什么作用_开发语言_12

8.3.4 创建公有的结构体和枚举

  • 结构体:在一个结构体定义的前面使用了 pub ,这个结构体会变成公有的,但是这个结构体的字段仍然是私有的(其字段默认未私有的,可以根据情况决定每个字段是否公有
  • 枚举:其成员默认就是公有的

alarmevaluator的作用 armoury crate有什么作用_作用域_13


alarmevaluator的作用 armoury crate有什么作用_alarmevaluator的作用_14

8.4 使用 use 关键字将路径引入作用域

8.4.1 use 的作用域

  • 注意:use 只能创建 use 当前所在的特定作用域内的短路径(比如:可用于在当前模块,切换到其他模块则需重新导入)

alarmevaluator的作用 armoury crate有什么作用_作用域_15


alarmevaluator的作用 armoury crate有什么作用_alarmevaluator的作用_16

8.4.2 use 的使用习惯

  • 使用 use 时,一般是引入一个模块(而不是直接引入某些函数),在调用函数时需要指定父模块

alarmevaluator的作用 armoury crate有什么作用_作用域_17

8.4.3 as 关键字

alarmevaluator的作用 armoury crate有什么作用_后端_18


alarmevaluator的作用 armoury crate有什么作用_rust_19

8.4.4 pub use:重导出名称

  • use some_mod:仅在当前作用域生效,对外仍是私有的
  • pub use some_mod:不仅在当前作用域生效,还可导入到其他作用域生效

alarmevaluator的作用 armoury crate有什么作用_rust_20

8.4.5 使用外部包

  • 对于外部包,需要先在 Cargo.toml 文件中添加所需的包,再使用 use 来导入包
  • 对于标准库,则直接 use 导入包即可

alarmevaluator的作用 armoury crate有什么作用_作用域_21

8.4.6 使用 {} 嵌套路径来简化 use 的使用

  • 举例:use std::{cmp::Ordering, io};use std::io::{self, Write};

alarmevaluator的作用 armoury crate有什么作用_开发语言_22

8.4.7 通过 glob 运算符将所有的公有定义引入作用域

alarmevaluator的作用 armoury crate有什么作用_作用域_23

8.5 将模块拆分成多个文件

alarmevaluator的作用 armoury crate有什么作用_alarmevaluator的作用_24


alarmevaluator的作用 armoury crate有什么作用_后端_25