rust - Rust-如何返回其他函数的错误?

标签 rust

给定以下两个功能:

fn foo() -> Result<i32, Box<dyn std::error::Error>> {
    // returns an error if something goes wrong
}

fn bar() -> Result<bool, Box<dyn std::error::Error>> {
   let x = foo(); // could be ok or err
   if x.is_err() {
       return // I want to return whatever error occured in function foo
    }
}
是否可以从函数foo返回出现在函数bar中的确切错误?
还要注意,Result<T, E>枚举在这些函数中具有不同的T

最佳答案

我只是让? operator完成所有工作。

fn foo(a: i32) -> Result<i32, Box<dyn std::error::Error>> {
    if a < 10 {
        // returns an error if something goes wrong
        Err(Box::from("bad value"))
    } else {
        Ok(a + 2)
    }
}

fn bar(a: i32) -> Result<bool, Box<dyn std::error::Error>> {
    let x = foo(a)?;
    Ok(x > 5)
}

fn main() {
    println!("{:?}", bar(2)); //  displays Err("bad value")
    println!("{:?}", bar(12)); // displays Ok(true)
}

关于rust - Rust-如何返回其他函数的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65988630/

相关文章:

rust - 你能把另一个匹配子句放在匹配臂中吗?

rust - 结构按字段分组向量

generics - rust:预期的类型参数,找到的结构

multithreading - Rust 中的 std::sync::Arc of trait

http - Hyper 找不到服务器模块

c - Rust FFI 传递 trait 对象作为调用回调的上下文

memory-management - 在运行时在堆上分配缓冲区

for-loop - 有没有办法做一个既不是迭代也不是线性的for循环?

rust - 如何解决可变借用和不可变借用的共存问题?

rust - 如何访问线程本地 LocalKey 静态变量?