|
|
|
@ -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<String, Box<dyn Error>> {
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这个方法很简单,在绝大多数场景中,性能也非常够用,但是有一个问题:`Result` 实际上不会限制错误的类型,也就是一个类型就算不实现 `Error` 特征,它依然可以在 `Result<T,E>` 中作为 `E` 来使用,此时这种特征对象的解决方案就无能为力了。
|
|
|
|
|
这个方法很简单,在绝大多数场景中,性能也非常够用,但是有一个问题:`Result` 实际上不会限制错误的类型,也就是一个类型就算不实现 `Error` 特征,它依然可以在 `Result<T, E>` 中作为 `E` 来使用,此时这种特征对象的解决方案就无能为力了。
|
|
|
|
|
|
|
|
|
|
#### 自定义错误类型
|
|
|
|
|
与特征对象相比,自定义错误类型麻烦归麻烦,但是它非常灵活,因此也不具有上面的类似限制:
|
|
|
|
|