Error handling 接受结果是惯用的方法吗<;T、 E>;作为函数参数?
考虑以下代码:Error handling 接受结果是惯用的方法吗<;T、 E>;作为函数参数?,error-handling,rust,idioms,Error Handling,Rust,Idioms,考虑以下代码: fn-foo(x:i32)->结果{ //... } fn条(x:结果)->结果{ //... } fn main(){ 设y=bar(foo(2)).unwrap(); } 传递结果类型是否是惯用方法?或者在直接传递i32之前,您应该处理错误或打开bar()的结果。接受结果作为参数是非常罕见的,除非在处理结果的通用库中 结果有助于使使用它更符合人体工程学。例如,和_then,将函数调用链接到先前的结果。您的示例可以更改为: fn foo(x: i32) -> Resul
fn-foo(x:i32)->结果{
//...
}
fn条(x:结果)->结果{
//...
}
fn main(){
设y=bar(foo(2)).unwrap();
}
传递
结果
类型是否是惯用方法?或者在直接传递i32
之前,您应该处理错误或打开bar()
的结果。接受结果作为参数是非常罕见的,除非在处理结果的通用库中
结果
有助于使使用它更符合人体工程学。例如,和_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();
}
fn-foo(x:i32)->结果{
//...
}
fn条(x:i32)->结果{
//...
}
fn main(){
设y=foo(2).和u,然后(| value | bar(value)).unwrap();
//或者更简洁地说,在这个简单的例子中:
让y=foo(2),然后(bar.unwrap();
}
我不能说我看到过这样一种情况,这种情况很有意义,但如果没有更清楚的解释,你为什么会这样做,就很难提供更多帮助
从本质上讲,bar
对Err()
输入有任何用处吗,还是直接传递?在前一种情况下,是的,bar
获取一个结果可能是有意义的,尽管考虑到你问的问题看起来不太可能
但是如果bar
以
fn条(x:Result)->Result{
设y=x?;
//使用实际的'i32'并可能输出错误
也就是说,它对错误没有实际用途,那么不,它不是惯用的,输入是不必要的、无用的复杂
在这种情况下,您需要的是:
fn条(x:i32)->结果{
//...
}
fn main(){
让y=foo(2),然后(bar.unwrap();
}