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();
}