From ff1f3f90c33786690590cc6445811202af7871e0 Mon Sep 17 00:00:00 2001 From: Aaran Xu Date: Wed, 19 Jan 2022 02:07:08 +0800 Subject: [PATCH] Update src/ch09-03-to-panic-or-not-to-panic.md #45 --- src/ch09-03-to-panic-or-not-to-panic.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ch09-03-to-panic-or-not-to-panic.md b/src/ch09-03-to-panic-or-not-to-panic.md index 4e2287e..a216a90 100644 --- a/src/ch09-03-to-panic-or-not-to-panic.md +++ b/src/ch09-03-to-panic-or-not-to-panic.md @@ -26,11 +26,11 @@ let home: IpAddr = "127.0.0.1".parse().unwrap(); ### 错误处理指导原则 -在当有可能会导致有害状态的情况下建议使用 `panic!` —— 在这里,有害状态是指当一些假设、保证、协议或不可变性被打破的状态,例如无效的值、自相矛盾的值或者被传递了不存在的值 —— 外加如下几种情况: +当代码有可能以有害状态结束时,建议让代码 panic。在这里,**有害状态**是指一些假设、保证、协议或不可变性被打破的状态,比如无效的值、矛盾的值或缺失的值被传递给代码——加上以下一种或多种情况: -- 有害状态并不包含 **预期** 会偶尔发生的错误。 -- 在此之后代码的运行依赖于不处于这种有害状态。 -- 当没有可行的手段来将有害状态信息编码进所使用的类型中的情况。 +- 有害状态是指一些意外的事情,而不是预期可能偶尔发生的事情,比如用户输入错误格式的数据。 +- 在此之后的代码需要摆脱这种有害状态,而不是在每一步都检查这个问题。 +- 在使用的类型中,没有一个好的方式来编码这些信息。我们将在第 17 章的[“将状态和行为编码为类型”][encoding]一节中通过一个例子来说明我们阐述的意思。 如果别人调用你的代码并传递了一个没有意义的值,最好的情况也许就是 `panic!` 并警告使用你的库的人他的代码中有 bug 以便他能在开发时就修复它。类似的,如果你正在调用不受你控制的外部代码,并且它返回了一个你无法修复的无效状态,那么 `panic!` 往往是合适的。 @@ -109,3 +109,5 @@ impl Guess { Rust 的错误处理功能旨在帮助你编写更健壮的代码。`panic!` 宏代表一个程序无法处理的状态,并停止执行而不是使用无效或不正确的值继续处理。Rust 类型系统的 `Result` 枚举代表操作可能会在一种可以恢复的情况下失败。可以使用 `Result` 来告诉代码调用者他需要处理潜在的成功或失败。在适当的场景使用 `panic!` 和 `Result` 将会使你的代码在面对不可避免的错误时显得更加可靠。 现在我们已经见识过了标准库中 `Option` 和 `Result` 泛型枚举的能力了,在下一章让我们来聊聊泛型是如何工作的,以及如何在你的代码中使用它们。 + +[encoding]: ch17-03-oo-design-patterns.html#将状态和行为编码为类型