我如何 return Serde 在 returns Result<() , Error> 的函数中出现错误

How can I return an error from Serde in a function that returns Result<() , Error>

我正在尝试 return 来自 Serde 的错误,其函数 returns Result<(), Error>:

use std::io::{Error};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Mine {
    ab: u8,
    ac: u8,
}
#[macro_use]
extern crate serde_derive;

fn main() {
    if do_match().is_ok() {
        println!("Success");
    }
}

fn do_match() -> Result<(), Error> {
    match serde_json::from_str::<Mine>("test") {
        Ok(_e) => println!("Okay"),
        Err(e) => return e,
    }
    Ok(())
}

Rust Playground

经过各种尝试,我一直无法将问题更正为return一个错误,我该怎么办?

首先,您使用了错误的错误类型。 serde_json::from_strErrserde_json::error::Error 类型,而您使用的是 std::io::Error。其次,通过 Err(e) 上的模式匹配,然后尝试 return e,你不再是 return 一个 Result,而是试图 return 类型 serde_json::error::Error。相反,您应该 returning Result<(), serde_json::error::Error>。这是完成您想要实现的目标的正确方法:

fn do_match() -> Result <(), serde_json::error::Error> {
    serde_json::from_str::<Mine>("test").map(|_| println!("Okay"))
}

map 只会对 serde_json::from_str 的结果执行 println!(...) 如果它是 Ok 变体,否则,它只会通过 Err 变体。然后,您可以 return 结果表达式。

Rust Playground