从特定实现中提取关联类型

Jel*_*teF 3 rust

我想为FromStr转发到子类型创建一个实现.现在我有这个游乐场:

struct MyInt(i32);

impl std::str::FromStr for MyInt {
    type Err = std::num::ParseIntError;
    fn from_str(src: &str) -> Result<Self, Self::Err> {
        return Ok(MyInt(i32::from_str(src)?))
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想根据实现来指定相关Err类型i32.我需要这个,因为我实际上想用自定义生成这个代码derive.所以我不能去手动查找它.

DK.*_*DK. 5

像这样:

impl std::str::FromStr for MyInt {
    type Err = <i32 as std::str::FromStr>::Err;
    fn from_str(src: &str) -> Result<Self, Self::Err> {
        return Ok(MyInt(i32::from_str(src)?))
    }
}
Run Code Online (Sandbox Code Playgroud)

<Type as Trait>语法有效,可以指定相关的项目(例如,从一个特定类型的类型和函数)impl一个特质.这意味着您也可以编写i32::from_stras <i32 as std::str::FromStr>::from_str,这在自定义派生的上下文中可能更可取,以避免在另一个from_str在范围内的情况下出现歧义.对于特征方法,您也可以只编写FromStr::from_str并让编译器推断出Self类型.