Update ch09-02-recoverable-errors-with-result.md (#89)

This commit is contained in:
Traffic Tse 2022-08-10 19:40:24 +08:00 committed by GitHub
parent 2e948f4f11
commit b5c7ae9d13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -144,7 +144,7 @@ fn main() {
### 失败时 panic 的简写:`unwrap` 和 `expect`
`match` 能够胜任它的工作,不过它可能有点冗长并且不总是能很好表明其意图。`Result<T, E>` 类型定义了很多辅助方法来处理各种情况。其中之一叫做 `unwrap`,它的实现就类似于示例 9-4 中的 `match` 语句。如果 `Result` 值是成员 `Ok``unwrap` 会返回 `Ok` 中的值。如果 `Result` 是成员 `Err``unwrap` 会为我们调用 `panic!`。这里是一个实践 `unwrap` 的例子:
`match` 能够胜任它的工作,不过它可能有点冗长并且不总是能很好表明其意图。`Result<T, E>` 类型定义了很多辅助方法来处理各种情况。其中之一叫做 `unwrap`,它的实现就类似于示例 9-4 中的 `match` 语句。如果 `Result` 值是成员 `Ok``unwrap` 会返回 `Ok` 中的值。如果 `Result` 是成员 `Err``unwrap` 会为我们调用 `panic!`。这里是一个实践 `unwrap` 的例子:
<span class="filename">文件名: src/main.rs</span>
@ -187,7 +187,7 @@ thread 'main' panicked at 'Failed to open hello.txt: Error { repr: Os { code:
### 传播错误
当编写一个其实现会调用一些可能会失败的操作的函数时,除了在这个函数中处理错误外,还可以选择让调用者知道这个错误并决定该如何处理。这被称为 **传播***propagating*)错误,这样能更好控制代码调用,因为比起你代码所拥有的上下文,调用者可能拥有更多信息或逻辑来决定应该如何处理错误。
当编写一个需要先调用一些可能会失败的操作的函数时,除了在这个函数中处理错误外,还可以选择让调用者知道这个错误并决定该如何处理。这被称为 **传播***propagating*)错误,这样能更好控制代码调用,因为比起你代码所拥有的上下文,调用者可能拥有更多信息或逻辑来决定应该如何处理错误。
例如,示例 9-6 展示了一个从文件中读取用户名的函数。如果文件不存在或不能读取,这个函数会将这些错误返回给调用它的代码: