at5*_*321 2 error-handling rust
看到这个问题下的评论,让我想知道 - 使用是否应该unwrap()被视为不好的做法?
在我看来,有时打开包装是有意义的。至少在这两种情况下:
Option值不能是None,因为我们已经在代码的前面处理过这种情况。一个例子:if o.is_none() {
// do some stuff here...
return ...;
}
// ...
o.unwrap() // <--- Here I do NOT expect a None
Run Code Online (Sandbox Code Playgroud)
Result、?等)可以或多或少地简化代码。显然,有时依赖unwrap()可能弊大于利,所以我是否应该始终避免使用对我来说并不是很明显unwrap()?如果没有的话什么时候可以使用unwrap()?
我们知道 Option 值不能为 None,因为我们已经在代码的前面检查了这种情况。一个例子:
Run Code Online (Sandbox Code Playgroud)if o.is_none() { return ...; } // ... o.unwrap() // <--- Here I do NOT expect a None
虽然在某些情况下这是不可避免的,但处理此问题的“正确”方法是使用模式匹配,例如
let o = if let Some(o) = o {
o
} else {
return o;
}
Run Code Online (Sandbox Code Playgroud)
或类似的规定。
在某些情况下,“展开”是不必要的,但在这种情况下,在生产软件中,我将使用expect非通用解释,或明确的panic!假设文档。
如果我们开发一个简单的短期工具,无论哪种方式都会以错误结束,依靠恐慌而不是“正确的”错误处理(使用 Result、?等)可以或多或少地简化代码。
这不会使它成为“良好实践”,而只会使其成为“我不关心在这种情况下的不良实践”。
这是一个完全合理的立场,但这不是好的做法。
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |