返回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/

10-12 00:48