diff --git a/contents/SUMMARY.md b/contents/SUMMARY.md index 68a9fd41..3033dbde 100644 --- a/contents/SUMMARY.md +++ b/contents/SUMMARY.md @@ -48,11 +48,11 @@ - [动态数组Vector](basic/collections/vector.md) - [KV存储HashMap](basic/collections/hashmap.md) - [类型转换](basic/converse.md) - - [返回值和异常](basic/result-error/intro.md) + - [返回值和错误处理](basic/result-error/intro.md) - [panic深入剖析!](basic/result-error/panic.md) - [返回值Result和?](basic/result-error/result.md) - [包和模块](basic/crate-module/intro.md) - - [包crate](basic/crate-module/crate.md) + - [包Crate](basic/crate-module/crate.md) - [模块Module](basic/crate-module/module.md) - [使用use引入模块及受限可见性](basic/crate-module/use.md) - [注释和文档](basic/comment.md) @@ -64,8 +64,8 @@ - [&'static 和 T: 'static](advance/lifetime/static.md) - [函数式编程: 闭包、迭代器](advance/functional-programing/intro.md) - - [闭包closure](advance/functional-programing/closure.md) - - [迭代器iterator](advance/functional-programing/iterator.md) + - [闭包Closure](advance/functional-programing/closure.md) + - [迭代器Iterator](advance/functional-programing/iterator.md) - [深入类型](advance/into-types/intro.md) - [newtype 和 类型别名](advance/into-types/custom-type.md) - [Sized 和不定长类型 DST](advance/into-types/sized.md) @@ -252,4 +252,5 @@ - [G-Rust版本说明](appendix/rust-version.md) - [H-Rust更新版本列表](appendix/rust-versions/intro.md) - [1.58](appendix/rust-versions/1.58.md) - - [1.59](appendix/rust-versions/1.59.md) \ No newline at end of file + - [1.59](appendix/rust-versions/1.59.md) + diff --git a/contents/advance/errors.md b/contents/advance/errors.md index 474db78a..ed9b6215 100644 --- a/contents/advance/errors.md +++ b/contents/advance/errors.md @@ -1,5 +1,5 @@ # 错误处理 -在之前的[返回值和错误章节](https://course.rs/basic/result-error/intro.html)中,我们学习了几个重要的概念,例如 `Result` 用于返回结果处理,`?` 用于错误的传播,若大家对此还较为模糊,强烈建议回头温习下。 +在之前的[返回值和错误处理](https://course.rs/basic/result-error/intro.html)章节中,我们学习了几个重要的概念,例如 `Result` 用于返回结果处理,`?` 用于错误的传播,若大家对此还较为模糊,强烈建议回头温习下。 在本章节中一起来看看如何对 `Result` ( `Option` ) 做进一步的处理,以及如何定义自己的错误类型。 @@ -515,7 +515,7 @@ fn render() -> Result> { } ``` -这个方法很简单,在绝大多数场景中,性能也非常够用,但是有一个问题:`Result` 实际上不会限制错误的类型,也就是一个类型就算不实现 `Error` 特征,它依然可以在 `Result` 中作为 `E` 来使用,此时这种特征对象的解决方案就无能为力了。 +这个方法很简单,在绝大多数场景中,性能也非常够用,但是有一个问题:`Result` 实际上不会限制错误的类型,也就是一个类型就算不实现 `Error` 特征,它依然可以在 `Result` 中作为 `E` 来使用,此时这种特征对象的解决方案就无能为力了。 #### 自定义错误类型 与特征对象相比,自定义错误类型麻烦归麻烦,但是它非常灵活,因此也不具有上面的类似限制: diff --git a/contents/basic/result-error/intro.md b/contents/basic/result-error/intro.md index 52f91a76..c9de9379 100644 --- a/contents/basic/result-error/intro.md +++ b/contents/basic/result-error/intro.md @@ -1,12 +1,12 @@ -# 返回和错误处理 +# 返回值和错误处理 飞鸽传书、八百里加急,自古以来,掌权者最需要的就是及时获得对某个事物的信息反馈,在此过程中,也定义了相应的应急处理措施。 社会演变至今,这种思想依然没变,甚至来到计算中的微观世界,也是如此。及时、准确的获知系统在发生什么,是程序设计的重中之重。因此能够准确的分辨函数返回值是正确的还是错误的、以及在发生错误时该怎么快速处理,成了程序设计语言的必备功能。 -Go 语言为人诟病的其中一点就是 ***if err != nil {}*** 的大量使用,缺乏一些程序设计的美感,不过我倒是觉得这种简单的方式也有其好处,就是阅读代码时的流畅感很强,你不需要过多的思考各种语法是什么意思。与 Go 语言不同,Rust 博采众家之长,实现了颇具自身色彩的返回值和错误处理体系,本章我们就高屋建瓴地来学习,更加深入的讲解见[此章](../../advance/errors/intro.md). +Go 语言为人诟病的其中一点就是 ***if err != nil {}*** 的大量使用,缺乏一些程序设计的美感,不过我倒是觉得这种简单的方式也有其好处,就是阅读代码时的流畅感很强,你不需要过多的思考各种语法是什么意思。与 Go 语言不同,Rust 博采众家之长,实现了颇具自身色彩的返回值和错误处理体系,本章我们就高屋建瓴地来学习,更加深入的讲解见[错误处理](https://course.rs/advance/errors.html)。 -## Rust的错误哲学 +## Rust 的错误哲学 错误对于软件来说是不可避免的,因此一门优秀的编程语言必须有其完整的错误处理哲学。在很多情况下,Rust 需要你承认自己的代码可能会出错,并提前采取行动,来处理这些错误。 Rust 中的错误主要分为两类: