From 3cc023f64e985dd0548c98ffe178126274bdf167 Mon Sep 17 00:00:00 2001 From: Allan Downey Date: Mon, 4 Apr 2022 03:25:54 +0800 Subject: [PATCH] update(index-list): add match and if let --- src/index-list.md | 71 +++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/src/index-list.md b/src/index-list.md index f50acd14..d4ae7d59 100644 --- a/src/index-list.md +++ b/src/index-list.md @@ -18,18 +18,18 @@ ## Sym -| 名称 | 关键字 | 简介 | -| ----------------------- | -------------- | ------------------------------------------------ | -| [?] | 错误传播 | 用于简化错误传播 | -| [()] | 单元类型 | 单元类型,无返回值 | -| `!` : [1 函数] [2 类型] | 永不返回 | 永不返回 | -| [&] | 引用 | 常规引用是一个指针类型,指向了对象存储的内存地址 | -| [\*] | 解引用 | 解出引用所指向的值 | -| [@] | 变量绑定 | 为一个字段绑定另外一个变量 | -| `_` | | 忽略该值或者类型 | -| ['a: 'b] | 生命周期约束 | 用来说明两个生命周期的长短 | -| [{:?}] {:#?} | 打印结构体信息 | 使用 `#[derive(Debug)]` 派生实现 `Debug` 特征 | -| A | | AIntroduction | +| 名称 | 关键字 | 简介 | +| ----------------------- | -------------- | ------------------------------------------------------------------------------------ | +| [?] | 错误传播 | 用于简化错误传播 | +| [()] | 单元类型 | 单元类型,无返回值 | +| `!` : [1 函数] [2 类型] | 永不返回 | 永不返回 | +| [&] | 引用 | 常规引用是一个指针类型,指向了对象存储的内存地址 | +| [\*] | 解引用 | 解出引用所指向的值 | +| [@] | 变量绑定 | 为一个字段绑定另外一个变量 | +| `_` : [2 模式匹配] | 忽略 | 1. 忽略该值或者类型,否则编译器会给你一个 `变量未使用的` 的警告
2. 模式匹配通配符 | +| ['a: 'b] | 生命周期约束 | 用来说明两个生命周期的长短 | +| [{:?}] {:#?} | 打印结构体信息 | 使用 `#[derive(Debug)]` 派生实现 `Debug` 特征 | +| A | | AIntroduction | [?]: https://course.rs/basic/result-error/result.html#传播界的大明星- [()]: https://course.rs/basic/base-type/function.html#无返回值 @@ -40,6 +40,7 @@ [@]: https://course.rs/basic/match-pattern/all-patterns.html#绑定 ['a: 'b]: https://course.rs/advance/lifetime/advance.html#生命周期约束-hrtb [{:?}]: https://course.rs/basic/compound-type/struct.html?search=#使用-derivedebug-来打印结构体的信息 +[2 模式匹配]: https://course.rs/basic/match-pattern/match-if-let.html#_-通配符 [back](#head) @@ -58,16 +59,18 @@ ## B -| 名称 | 关键字 | 简介 | -| ------------ | --------- | -------------------------------------- | -| [变量遮蔽] | shadowing | 允许声明相同的变量名,后者会遮蔽掉前者 | -| [变量作用域] | 所有权 | 作用域是一个变量在程序中有效的范围 | -| [表达式] | | 进行求值,结尾无 `;`,有返回值 | -| [bool 布尔] | 布尔类型 | `true` `false`,占用 1 字节 | -| [break] | 循环控制 | 直接跳出当前整个循环 | -| B | KWB | BIntroduction | +| 名称 | 关键字 | 简介 | +| ------------ | --------- | ------------------------------------------------------------------------------ | +| [变量遮蔽] | shadowing | 允许声明相同的变量名,后者会遮蔽掉前者 | +| [变量覆盖] | 模式匹配 | 无论是是 `match` 还是 `if let`,他们都可以在模式匹配时覆盖掉老的值,绑定新的值 | +| [变量作用域] | 所有权 | 作用域是一个变量在程序中有效的范围 | +| [表达式] | | 进行求值,结尾无 `;`,有返回值 | +| [bool 布尔] | 布尔类型 | `true` `false`,占用 1 字节 | +| [break] | 循环控制 | 直接跳出当前整个循环 | +| B | KWB | BIntroduction | [变量遮蔽]: https://course.rs/basic/variable.html#变量遮蔽shadowing +[变量覆盖]: https://course.rs/basic/match-pattern/match-if-let.html#变量覆盖 [变量作用域]: https://course.rs/basic/ownership/ownership.html#变量作用域 [bool 布尔]: https://course.rs/basic/base-type/char-bool.html#布尔bool [表达式]: https://course.rs/basic/base-type/statement-expression.html#表达式 @@ -147,14 +150,16 @@ ## I -| 名称 | 关键字 | 简介 | -| --------- | -------- | -------------------------- | -| [if else] | 流程控制 | 根据条件执行不同的代码分支 | -| [else if] | 流程控制 | 处理多重条件 | -| I | KWI | IIntroduction | +| 名称 | 关键字 | 简介 | +| ------------- | -------- | --------------------------------------------------------------------- | +| [if else] | 流程控制 | 根据条件执行不同的代码分支 | +| [else if] | 流程控制 | 处理多重条件 | +| [if let 匹配] | 模式匹配 | 当你只要匹配一个条件,且忽略其他条件时就用 `if let`,否则都用 `match` | +| I | KWI | IIntroduction | [if else]: https://course.rs/basic/flow-control.html#使用-if-来做分支控制 [else if]: https://course.rs/basic/flow-control.html#使用-else-if-来处理多重条件 +[if let 匹配]: https://course.rs/basic/match-pattern/match-if-let.html#if-let-匹配 [back](#head) @@ -192,11 +197,17 @@ ## M -| 名称 | 关键字 | 简介 | -| ----------- | ---------- | ----------------------------------------------------- | -| [move 移动] | 转移所有权 | `let s2 = s1;`
`s1` 所有权转移给了 `s2`,`s1` 失效 | -| M | KWM | MIntroduction | - +| 名称 | 关键字 | 简介 | +| ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [模式绑定] | 模式匹配 | 从模式中取出绑定的值 | +| [match 匹配] | 模式匹配 | `match` 的匹配必须要穷举出所有可能,因此这里用 `_ ` 来代表未列出的所有可能性
`match` 的每一个分支都必须是一个表达式,且所有分支的表达式最终返回值的类型必须相同 | +| [matches! 宏] | 模式匹配 | 将一个表达式跟模式进行匹配,然后返回匹配的结果 `true` 或 `false` | +| [move 移动] | 转移所有权 | `let s2 = s1;`
`s1` 所有权转移给了 `s2`,`s1` 失效 | +| M | KWM | MIntroduction | + +[模式绑定]: https://course.rs/basic/match-pattern/match-if-let.html#模式绑定 +[match 匹配]: https://course.rs/basic/match-pattern/match-if-let.html#match-匹配 +[matches! 宏]: https://course.rs/basic/match-pattern/match-if-let.html#matches宏 [move 移动]: https://course.rs/basic/ownership/ownership.html#转移所有权 [back](#head)