作为函数参数?,error-handling,rust,idioms"/>

首页 > 解决方案 > 接受结果是惯用的 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

标签: error-handlingrustidioms

解决方案


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

推荐阅读