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



我想为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)?))
    }
}

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

喜欢:

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)?))
    }
}

<Type as Trait>语法有效地使您可以从特定类型的特定类型的 impl指定关联的项目(例如类型和函数(。这意味着您还可以将i32::from_str写为<i32 as std::str::FromStr>::from_str,在自定义派生的上下文中,如果另一个from_str在范围中,则可以避免歧义。对于特质方法,您也可以仅编写FromStr::from_str并让编译器推断Self类型。

最新更新