error-handling - 接受 Result<T, E> 作为函数参数是惯用的 Rust 吗?

标签 error-handling rust idioms

考虑以下代码:

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 类型是惯用的吗?或者您应该在直接传递 i32 之前处理错误或解包 bar() 的结果。

最佳答案

接受 Result 作为参数是很不寻常的,除了在处理 Result 的通用库中。

Resulta lot of methods这有助于使其更符合人体工程学。例如,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();
}

关于error-handling - 接受 Result<T, E> 作为函数参数是惯用的 Rust 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62445889/

相关文章:

Node.js 错误回调

assembly - 如何获取 VESA BIOS 信息

c++ - 生成从 0 到 n-1 的数字的惯用方法是什么?

python - 惯用的 Python : 'times' loop

c++ - Codelite 程序将无法运行

swift - 错误: Cannot convert value type GameScene to expected argument SKScene

function - 如何允许使用-erroraction调用函数

nested - 将具有父 ID 的结构列表转换为树列表

rust - 如果体系结构是 32 位还是 64 位,如何检查 Rust?

java - 如何有效地对抽象列表进行嵌套迭代?