我想为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
类型。