1

我正在尝试使用返回的函数从 Serde 返回错误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(())
}

锈游乐场

经过各种尝试,我一直无法纠正问题返回错误,我该怎么办?

4

1 回答 1

2

首先,您使用了错误的错误类型。serde_json::from_str'sErr是类型serde_json::error::Error,而您正在使用std::io::Error. 其次,通过模式匹配Err(e)然后尝试 to return e,您不再返回 aResult而是试图只返回 type 的东西serde_json::error::Error。相反,您应该返回Result<(), serde_json::error::Error>. 这是完成您要实现的目标的正确方法:

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

map如果它是一个变体,只会println!(...)对结果执行,否则,它只会通过变体。然后,您可以只返回结果表达式。serde_json::from_strOkErr

锈游乐场

于 2020-01-13T05:26:48.277 回答