error-handling - 接受结果是惯用的 Rust作为函数参数?
问题描述
考虑以下代码:
fn foo(x: i32) -> Result<i32, Error> {
//...
}
fn bar(x: Result<i32,Error>) -> Result<i32, Error> {
//...
}
fn main() {
let y = bar(foo(2)).unwrap();
}
这是惯用的,传递Result
类型吗?或者你应该在直接bar()
传递之前处理错误还是解开结果。i32
解决方案
接受 a 作为参数是很不寻常的,除了在处理s 的Result
通用库中。Result
Result
有很多方法有助于使其更符合人体工程学。例如,and_then
,它将函数调用链接到先前的结果。您的示例可以更改为:
fn foo(x: i32) -> Result<i32, Error> {
//...
}
fn bar(x: i32) -> Result<i32, Error> {
//...
}
fn main() {
let y = foo(2).and_then(|value| bar(value)).unwrap();
// or more concisely in this simple case:
let y = foo(2).and_then(bar).unwrap();
}
推荐阅读
- python - 如何在python中找到鼠标X和Y,简单
- c# - 如何将 varbinary 对象从数据库显示/绑定到 gridview?
- javascript - ASP.Net MVC PWA 的推送通知
- django - 如何根据模型中的外键字段在django中开发下拉菜单
- c - 我的代码中没有出现错误,但是当我的程序到达“chooseCard”函数时,它会终止
- mysql - 我必须在 *sql.Tx.Rollback() 调用之前调用 *sql.Rows.Close() 吗?
- r - 如何在 R 中获得预测概率,但使用 Stata 的默认设置?
- python - 如果窗口中的按钮已经绑定到函数,如何使用按钮关闭顶级 tkinter 窗口
- objective-c - 调用参数的 NSInvocation 作为 NSNumber 时的 EXC_BAD_ACCESS
- c++ - cpprestsdk 使用 vcpkg、cmake - 找不到包含文件