mirror of
https://github.com/rust-lang-cn/book-cn.git
synced 2025-01-23 07:20:20 +08:00
doc: Optimize the description at ch09-03
This commit is contained in:
parent
d7b418929b
commit
89ec5786ca
@ -8,7 +8,7 @@
|
||||
|
||||
当你编写一个示例来展示一些概念时,在拥有健壮的错误处理代码的同时也会使得例子不那么明确。例如,调用一个类似 `unwrap` 这样可能 `panic!` 的方法可以被理解为一个你实际希望程序处理错误方式的占位符,它根据其余代码运行方式可能会各不相同。
|
||||
|
||||
类似地,在我们准备好决定如何处理错误之前,`unwrap`和`expect`方法在原型设计时非常方便。当我们准备好让程序更加健壮时,它们会在代码中留下清晰的标记。
|
||||
类似地,在我们准备好决定如何处理错误之前,`unwrap` 和 `expect` 方法在原型设计时非常方便。当我们准备好让程序更加健壮时,它们会在代码中留下清晰的标记。
|
||||
|
||||
如果方法调用在测试中失败了,我们希望这个测试都失败,即便这个方法并不是需要测试的功能。因为 `panic!` 会将测试标记为失败,此时调用 `unwrap` 或 `expect` 是恰当的。
|
||||
|
||||
@ -28,9 +28,9 @@ let home: IpAddr = "127.0.0.1".parse().unwrap();
|
||||
|
||||
在当有可能会导致有害状态的情况下建议使用 `panic!` —— 在这里,有害状态是指当一些假设、保证、协议或不可变性被打破的状态,例如无效的值、自相矛盾的值或者被传递了不存在的值 —— 外加如下几种情况:
|
||||
|
||||
* 有害状态并不包含 **预期** 会偶尔发生的错误
|
||||
* 在此之后代码的运行依赖于不处于这种有害状态
|
||||
* 当没有可行的手段来将有害状态信息编码进所使用的类型中的情况
|
||||
- 有害状态并不包含 **预期** 会偶尔发生的错误。
|
||||
- 在此之后代码的运行依赖于不处于这种有害状态。
|
||||
- 当没有可行的手段来将有害状态信息编码进所使用的类型中的情况。
|
||||
|
||||
如果别人调用你的代码并传递了一个没有意义的值,最好的情况也许就是 `panic!` 并警告使用你的库的人他的代码中有 bug 以便他能在开发时就修复它。类似的,如果你正在调用不受你控制的外部代码,并且它返回了一个你无法修复的无效状态,那么 `panic!` 往往是合适的。
|
||||
|
||||
@ -102,10 +102,10 @@ impl Guess {
|
||||
|
||||
接着,我们实现了一个借用了 `self` 的方法 `value`,它没有任何其他参数并返回一个 `i32`。这类方法有时被称为 *getter*,因为它的目的就是返回对应字段的数据。这样的公有方法是必要的,因为 `Guess` 结构体的 `value` 字段是私有的。私有的字段 `value` 是很重要的,这样使用 `Guess` 结构体的代码将不允许直接设置 `value` 的值:调用者 **必须** 使用 `Guess::new` 方法来创建一个 `Guess` 的实例,这就确保了不会存在一个 `value` 没有通过 `Guess::new` 函数的条件检查的 `Guess`。
|
||||
|
||||
于是,一个接收(或返回) 1 到 100 之间数字的函数就可以声明为接收(或返回) `Guess`的实例,而不是 `i32`,同时其函数体中也无需进行任何额外的检查。
|
||||
于是,一个接收(或返回) 1 到 100 之间数字的函数就可以声明为接收(或返回) `Guess` 的实例,而不是 `i32`,同时其函数体中也无需进行任何额外的检查。
|
||||
|
||||
## 总结
|
||||
|
||||
Rust 的错误处理功能被设计为帮助你编写更加健壮的代码。`panic!` 宏代表一个程序无法处理的状态,并停止执行而不是使用无效或不正确的值继续处理。Rust 类型系统的 `Result` 枚举代表操作可能会在一种可以恢复的情况下失败。可以使用 `Result` 来告诉代码调用者他需要处理潜在的成功或失败。在适当的场景使用 `panic!` 和 `Result` 将会使你的代码在面对不可避免的错误时显得更加可靠。
|
||||
Rust 的错误处理功能旨在帮助你编写更健壮的代码。`panic!` 宏代表一个程序无法处理的状态,并停止执行而不是使用无效或不正确的值继续处理。Rust 类型系统的 `Result` 枚举代表操作可能会在一种可以恢复的情况下失败。可以使用 `Result` 来告诉代码调用者他需要处理潜在的成功或失败。在适当的场景使用 `panic!` 和 `Result` 将会使你的代码在面对不可避免的错误时显得更加可靠。
|
||||
|
||||
现在我们已经见识过了标准库中 `Option` 和 `Result` 泛型枚举的能力了,在下一章让我们聊聊泛型是如何工作的,以及如何在你的代码中使用他们。
|
||||
现在我们已经见识过了标准库中 `Option` 和 `Result` 泛型枚举的能力了,在下一章让我们来聊聊泛型是如何工作的,以及如何在你的代码中使用它们。
|
||||
|
Loading…
Reference in New Issue
Block a user