Rust 学习笔记(14)-模块系统

模块系统 是《Rust 程序设计语言》第7章的全部内容,啰里八嗦了一整章,人都绕晕了,我相信大家和我一样,哈哈哈

  1. 什么是包(Packages)

简单来说,你的项目就是一个包,每一个包(Package)都有一个Cargo.toml文件

1
2
用 cargo new xxx 创建出来的项目 xxx 就是一个二进制包  
用 cargo new --lib xxx 创建出来的项目 xxx 就是一个类库包
  1. 什么是箱(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)

Rust 学习笔记(12)-match

match 允许我们将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。

上一节我们学习了Option<T>,这一节我们就来学习下,如何处理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;
}

Rust 学习笔记(11)-Option

我们之前提到了在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有什么不同?下面我说说我的见解

Rust 学习笔记(10)-枚举

本篇是阅读 《Rust 程序设计语言》第6.1章 枚举 而来的结果

枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同,Rust中的枚举允许你通过列举可能的成员(variants)来定义一个类型

枚举主要作用是限制传入或传出的类型,避免出现其他类型,这在Rust中有一个著名的枚举 Option 我们稍后会学习