我如何 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(())
}
经过各种尝试,我一直无法将问题更正为return一个错误,我该怎么办?
首先,您使用了错误的错误类型。 serde_json::from_str
的 Err
是 serde_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 结果表达式。
我正在尝试 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(())
}
经过各种尝试,我一直无法将问题更正为return一个错误,我该怎么办?
首先,您使用了错误的错误类型。 serde_json::from_str
的 Err
是 serde_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 结果表达式。