From e39ac19fbd9d0f74c80d251925bdb8905e1adbe9 Mon Sep 17 00:00:00 2001 From: Allan Downey Date: Sun, 7 Aug 2022 15:02:21 +0800 Subject: [PATCH 1/2] update(index-list): update Box Deref Drop --- src/index-list.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/index-list.md b/src/index-list.md index 1002b0c4..d9d22926 100644 --- a/src/index-list.md +++ b/src/index-list.md @@ -81,8 +81,9 @@ | [变量遮蔽] | shadowing | 允许声明相同的变量名,后者会遮蔽掉前者 | | [变量覆盖] | 模式匹配 | 无论是是 `match` 还是 `if let`,他们都可以在模式匹配时覆盖掉老的值,绑定新的值 | | [变量作用域] | 所有权 | 作用域是一个变量在程序中有效的范围 | -| [表达式]与[语句] | | 表达式:进行求值,结尾无 `;`,有返回值,如 `x + 9` 另见 [附录 C]
语句:完成一个操作,结尾有 `;` ,无返回值,如 `let x = 9;` | +| [表达式] 与 [语句] | | 表达式:进行求值,结尾无 `;`,有返回值,如 `x + 9` 另见 [附录 C]
语句:完成一个操作,结尾有 `;` ,无返回值,如 `let x = 9;` | | [bool 布尔] | 布尔类型 | `true` `false`,占用 1 字节 | +| [Box\] | 智能指针 | 允许你将一个值分配到堆上,然后在栈上保留一个智能指针指向堆上的数据 | | [break] | 循环控制 | 直接跳出当前整个循环 | | [backtrace 栈展开] | 不可恢复错误 | `RUST_BACKTRACE=1 cargo run` | | | KWB | | @@ -96,6 +97,7 @@ [附录 c]: https://course.rs/appendix/expressions.html [break]: https://course.rs/basic/flow-control.html#break [backtrace 栈展开]: https://course.rs/basic/result-error/panic.html#backtrace-栈展开 +[box\]: https://course.rs/advance/smart-pointer/box.html#使用-boxt-将数据存储在堆上 [back](#head) @@ -127,15 +129,21 @@ ## D -| 名称 | 关键字 | 简介 | -| ---------- | -------- | ---------------------------------------------------------------------------------------------------------------- | -| [derive] | 派生特征 | `#[derive(Trait)]`,被标记的对象自动实现对应的默认特征代码
详见:[附录-派生特征] | -| [点操作符] | 类型转换 | 方法调用的点操作符,在调用时,会发生很多魔法般的类型转换,例如:自动引用、自动解引用,强制类型转换直到类型能匹配 | -| | KWD | | +| 名称 | 关键字 | 简介 | +| ----------------- | -------- | ------------------------------------------------------------------------------------------------------------------ | +| [derive] | 派生特征 | `#[derive(Trait)]`,被标记的对象自动实现对应的默认特征
详见:[附录-派生特征] | +| [点操作符] | 类型转换 | 方法调用的点操作符,在调用时,会发生很多魔法般的类型转换
例如:自动引用、自动解引用,强制类型转换直到类型能匹配 | +| [Deref 解引用] | 智能指针 | | +| [三种 Deref 转换] | 智能指针 | | +| [Drop 释放资源] | 智能指针 | | +| | KWD | | [derive]: https://course.rs/basic/trait/trait.html#通过-derive-派生特征 [附录-派生特征]: https://course.rs/appendix/derive.html [点操作符]: https://course.rs/basic/converse.html#点操作符 +[deref 解引用]: https://course.rs/advance/smart-pointer/deref.html#deref-解引用 +[三种 deref 转换]: https://course.rs/advance/smart-pointer/deref.html#三种-deref-转换 +[drop 释放资源]: https://course.rs/advance/smart-pointer/drop.html#drop-释放资源 [back](#head) From 5da14a5de9e3c38703e49abf73c6d72bb2c7edd5 Mon Sep 17 00:00:00 2001 From: cd Date: Wed, 10 Aug 2022 11:14:33 +0800 Subject: [PATCH 2/2] Update all-patterns.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此处已经假设x的值是`None`了,所以最后描述未被覆盖的x应该用`None`,而不是`Some(5)` --- src/basic/match-pattern/all-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/match-pattern/all-patterns.md b/src/basic/match-pattern/all-patterns.md index d09ce849..758dbfb2 100644 --- a/src/basic/match-pattern/all-patterns.md +++ b/src/basic/match-pattern/all-patterns.md @@ -40,7 +40,7 @@ fn main() { 第二个匹配分支中的模式引入了一个新变量 `y`,它会匹配任何 `Some` 中的值。因为这里的 `y` 在 `match` 表达式的作用域中,而不是之前 `main` 作用域中,所以这是一个新变量,不是开头声明为值 10 的那个 `y`。这个新的 `y` 绑定会匹配任何 `Some` 中的值,在这里是 `x` 中的值。因此这个 `y` 绑定了 `x` 中 `Some` 内部的值。这个值是 5,所以这个分支的表达式将会执行并打印出 `Matched,y = 5`。 -如果 `x` 的值是 `None` 而不是 `Some(5)`,头两个分支的模式不会匹配,所以会匹配模式 `_`。这个分支的模式中没有引入变量 `x`,所以此时表达式中的 `x` 会是外部没有被覆盖的 `x`,也就是 `Some(5)`。 +如果 `x` 的值是 `None` 而不是 `Some(5)`,头两个分支的模式不会匹配,所以会匹配模式 `_`。这个分支的模式中没有引入变量 `x`,所以此时表达式中的 `x` 会是外部没有被覆盖的 `x`,也就是 `None`。 一旦 `match` 表达式执行完毕,其作用域也就结束了,同理内部 `y` 的作用域也结束了。最后的 `println!` 会打印 `at the end: x = Some(5), y = 10`。