2.6.3 模式适用场景 模式适用场景 1. 模式 模式是 Rust 中的特殊语法,它用来匹配类型中的结构和数据,它往往和 match 表达式联用,以实现强大的模式匹配能力。模式一般由以下内容组合而成: 字面值 解构的数组、枚举、结构体或者元组 变量 通配符 占位符 2. 所有可能用到模式的地方 2.1 match 分支 12345match VALUE { PATTERN 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6.2 解构 Option 解构 Option 在枚举那章,提到过 Option 枚举,它用来解决 Rust 中变量是否有值的问题,定义如下: 1234enum Option<T> { None, Some(T),} 简单解释就是:一个变量要么有值:Some(T), 要么为空:None。 那么现在的问题就是该如何去使用这个 Option 枚举类型,根据我们上一节的经验 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6.1 match和 if let match 和 if let 在 Rust 中,模式匹配最常用的就是 match 和 if let。 先来看一个关于 match 的简单例子: 1234567891011121314151617enum Direction { East, West, North, South,}fn main() { let dire = Dir 2025-01-05 rust > rust圣经 > rust基础 #rust
2.6 模式匹配 模式匹配 经常出现在函数式编程里,用于为复杂的类型系统提供一个轻松的解构能力。 在枚举和流程控制那章,我们遗留了两个问题,都是关于 match 的, 第一个是如何对 Option 枚举进行进一步处理, 另外一个是如何用 match 来替代 else if 这种丑陋的多重分支使用方式。 2025-01-05 rust > rust圣经 > rust基础 #rust
2.5 流程控制 1. 流程控制 1.1 使用 if 来做分支控制 if else 表达式根据条件执行不同的代码分支: 12345if condition == true { // A...} else { // B...} 该代码读作:若 condition 的值为 true,则执行 A 代码,否则执行 B 代码。 先看下面代码: 123456 2025-01-05 rust > rust圣经 > rust基础 #rust
2.4.5 数组 1. 数组 在日常开发中,使用最广的数据结构之一就是数组,在 Rust 中,最常用的数组有两种,第一种是速度很快但是长度固定的 array,第二种是可动态增长的但是有性能损耗的 Vector,在本书中,我们称 array 为数组,Vector 为动态数组。 不知道你们发现没,这两个数组的关系跟 &str 与 String 的关系很像,前者是长度固定的字符串切片,后者是可动态 2025-01-05 rust > rust圣经 > rust基础 #rust
2.4.4 枚举 枚举 枚举(enum 或 enumeration)允许你通过列举可能的成员来定义一个枚举类型,例如扑克牌花色: 123456enum PokerSuit { Clubs, Spades, Diamonds, Hearts,} 再回到之前创建的 PokerSuit,扑克总共有四种花色,而这里我们枚举出所有的可能值,这也正是 枚举 名称的由来。 任何一张扑克, 2025-01-05 rust > rust圣经 > rust基础 #rust
2.4.3 结构体 结构体 1. 结构体语法 1.1 定义结构体 一个结构体由几部分组成: 通过关键字 struct 定义 一个清晰明确的结构体 名称 几个有名字的结构体 字段 例如, 以下结构体定义了某网站的用户: 123456struct User { active: bool, username: String, email: String, sign_ 2025-01-05 rust > rust圣经 > rust基础 #rust
2.4.2 元组 元组 元组是由多种类型组合到一起形成的,因此它是复合类型,元组的长度是固定的,元组中元素的顺序也是固定的。 可以通过以下语法创建一个元组: 123fn main() { let tup: (i32, f64, u8) = (500, 6.4, 1);} 变量 tup 被绑定了一个元组值 (500, 6.4, 1),该元组的类型是 (i32, f64, u8), 2025-01-05 rust > rust圣经 > rust基础 #rust
2.4.1 字符串与切片 1 字符串 1.1 切片(slice) 切片并不是 Rust 独有的概念,在 Go 语言中就非常流行,它允许你引用集合中部分连续的元素序列,而不是引用整个集合。 对于字符串而言,切片就是对 String 类型中某一部分的引用,它看起来像这样: 1234567#![allow(unused)]fn main() {let s = String::from("hello 2025-01-05 rust > rust圣经 > rust基础 #rust