返回Result时,我需要将解析错误转换为我自己的Error类型。简化后,它看起来如下所示:
enum MyError {
Parse,
...,
}
fn process<R: FromStr>(s: &str) -> Result<(), MyError> {
Ok(s.parse::<R>()?)
}
为了上述工作,应实现特质。这不起作用:
impl From<std::str::FromStr::Err> for MyError {
fn from(e: std::str::FromStr::Err) -> MyError {
MyError::Parse
}
}
编译器诊断:
help: use fully-qualified syntax: `<Type as std::str::FromStr>::Err`
但是我不知道确切的
Type
。关键是要允许从所有可能的错误中进行转换。 最佳答案
如果仍然要丢弃解析错误,请使用 map_err
在本地更改错误:
fn process<R: FromStr>(s: &str) -> Result<(), MyError> {
let _ = s.parse::<R>().map_err(|_| MyError::Parse)?;
Ok(())
}
关于error-handling - 为另一个特征项目类型实现特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56316382/