Generics 如何实现从将一种结果类型转换为另一种结果类型?
如果已经实现了Generics 如何实现从将一种结果类型转换为另一种结果类型?,generics,rust,traits,Generics,Rust,Traits,如果已经实现了ErrorType2::From(ErrorType1),是否可以将Result转换为Result?看来这应该是可能的 这是我第一次尝试,但它无法编译 impl<T> From<Result<T, LocalErrorType>> for Result<T, ForeignErrorType> { fn from<T>(res: Result<T, LocalErrorType>) -> Self
ErrorType2::From(ErrorType1)
,是否可以将Result
转换为Result
?看来这应该是可能的
这是我第一次尝试,但它无法编译
impl<T> From<Result<T, LocalErrorType>> for Result<T, ForeignErrorType> {
fn from<T>(res: Result<T, LocalErrorType>) -> Self {
match sr {
Ok(o) => Ok(o),
Err(se) => Err(se.into())
}
}
}
impl From获取结果{
fn from(res:Result)->Self{
匹配sr{
正常(o)=>正常(o),
Err(se)=>Err(se.into())
}
}
}
因为:
- 来自的
是一种外来特征
是外来类型,尽管Result
是本地类型LocalErrorType
也是外来类型Result
如何实现这一点?一个不实现两个
结果
类型之间的转换。由于以下两个原因,不需要进行这种转换:
map\u err
一样简单:
让res:Result=do_something();
让res:Result=res.map\u err(From::From);
map\u err
,因为?
操作符(或1.13之前的try!
宏)已经使用下面类似的过程转换错误类型
fn do_something()->结果{未实现!()}
fn foo()->结果{
让我们做点什么吧?;
好(())
}
结果类型之间的转换。由于以下两个原因,不需要进行这种转换:
实现错误类型之间的转换(从特定类型转换为更一般的错误类型)是常见的习惯做法。如果这两种类型中没有一种比另一种更通用,则可以创建一个新类型,该类型是这两种类型的总和(即每个变量都包含不同错误类型的枚举)。这样,转换结果就像使用map\u err
一样简单:
让res:Result=do_something();
让res:Result=res.map\u err(From::From);
您可能也不需要调用map\u err
,因为?
操作符(或1.13之前的try!
宏)已经使用下面类似的过程转换错误类型
fn do_something()->结果{未实现!()}
fn foo()->结果{
让我们做点什么吧?;
好(())
}
另见: