|
|
|
@ -28,12 +28,12 @@ let home: IpAddr = "127.0.0.1".parse().unwrap();
|
|
|
|
|
|
|
|
|
|
我们通过解析一个硬编码的字符来创建一个 `IpAddr` 实例。可以看出 `127.0.0.1` 是一个有效的 IP 地址,所以这里使用 `unwrap` 是可以接受的。然而,拥有一个硬编码的有效的字符串也不能改变 `parse` 方法的返回值类型:它仍然是一个 `Result` 值,而编译器仍然就好像还是有可能出现 `Err` 成员那样要求我们处理 `Result`,因为编译器还没有智能到可以识别出这个字符串总是一个有效的 IP 地址。如果 IP 地址字符串来源于用户而不是硬编码进程序中的话,那么就 **确实** 有失败的可能性,这时就绝对需要我们以一种更健壮的方式处理 `Result` 了。
|
|
|
|
|
|
|
|
|
|
### 错误处理指导原则
|
|
|
|
|
### 错误处理指导原则sfae
|
|
|
|
|
|
|
|
|
|
在当有可能会导致有害状态的情况下建议使用 `panic!` —— 在这里,有害状态是指当一些假设、保证、协议或不可变性被打破的状态,例如无效的值、自相矛盾的值或者被传递了不存在的值 —— 外加如下几种情况:
|
|
|
|
|
|
|
|
|
|
* 有害状态并不包含 **预期** 会偶尔发生的错误
|
|
|
|
|
* 之后的代码的运行依赖于处于这种有害状态
|
|
|
|
|
* 在此之后代码的运行依赖于不处于这种有害状态
|
|
|
|
|
* 当没有可行的手段来将有害状态信息编码进所使用的类型中的情况
|
|
|
|
|
|
|
|
|
|
如果别人调用你的代码并传递了一个没有意义的值,最好的情况也许就是 `panic!` 并警告使用你的库的人他的代码中有 bug 以便他能在开发时就修复它。类似的,`panic!` 通常适合调用不能够控制的外部代码时,这时无法修复其返回的无效状态。
|
|
|
|
|