我想为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.所以我不能去手动查找它.
像这样:
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类型.