编程语言
2150
5 分钟
模块系统 是《Rust 程序设计语言》第7章的全部内容,啰里八嗦了一整章,人都绕晕了,我相信大家和我一样,哈哈哈
- 什么是包(Packages)
简单来说,你的项目就是一个包,每一个包(Package)都有一个Cargo.toml
文件
1
2
|
用 cargo new xxx 创建出来的项目 xxx 就是一个二进制包
用 cargo new --lib xxx 创建出来的项目 xxx 就是一个类库包
|
- 什么是箱(Crate)
箱(Crate)类似一种"看不见,摸不着"
的概念,它是一个模块的树形结构,它形成了库或二进制项目
Crate 会将一个作用域内的相关功能分组到一起,使得该功能可以很方便地在多个项目之间共享。
1
2
3
4
5
6
7
8
9
10
11
|
编译生成的可执行文件,你就可以把它看成是一个箱(Crate),一个库(lib)项目,你也可以把他看成是一个箱(Crate)
一个包下至少有一个箱(Crate), 可以是类库箱(Crate),也可以是二进制箱(Crate)
一个包下可以包含任意多个二进制箱(Crate),但只能包含 0 或 1个类库箱(Crate)
Rust中的默认箱(crate):
src/main.rs // 二进制箱(binary crate)的根文件,该箱(crate)与包(package)同名
src/lib.rs // 类库箱(library crate)的根文件 ,该箱(crate)与包(package)同名
多个二进制箱(binary crates):
在src/bin目录下创建.rs文件, 每个文件都是一个二进制箱(Crate)
|
编程语言
225
1 分钟
if let
是一个语法糖,它可以简化 match
的写法
编程语言
717
2 分钟
match
允许我们将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。
上一节我们学习了Option<T>
,这一节我们就来学习下,如何处理Option<T>
1
2
3
4
5
6
7
8
9
10
11
12
|
fn main() {
let x: i8 = 5;
let y: Option<i8> = Some(5);
// 处理`Option`
let z = match y {
Some(i) => i,
None => 0,
};
let sum = i + z;
}
|
编程语言
901
2 分钟
我们之前提到了在Rust中有一个非常常用的枚举 Option
,它的原型是如下的样子
1
2
3
4
|
enum Option<T> {
None,
Some(T),
}
|
它代表了有值和没有值的情况,成员 None
代表没有值,也就是空值的情况,Some(T)
代表了有值的情况,换句话说 Option<T>
代表了一个可能为空的值
Option<T>
枚举是如此有用以至于它甚至被包含在了 prelude
之中,你不需要将其显式引入作用域。另外,它的成员也是如此,可以不需要 Option:: 前缀来直接使用 Some 和 None。即便如此 Some(T) 和 None 仍是 Option 的成员。
这有什么好处或者说什么用处呢?Rust为什么要这么设计它?它和其他语言中的null
有什么不同?下面我说说我的见解
编程语言
963
2 分钟
本篇是阅读 《Rust 程序设计语言》第6.1章 枚举
而来的结果
枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同,Rust中的枚举允许你通过列举可能的成员(variants)来定义一个类型
枚举主要作用是限制传入或传出的类型,避免出现其他类型,这在Rust中有一个著名的枚举 Option
我们稍后会学习