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()->结果{
    让我们做点什么吧?;
    好(())
    }
    
  • 另见: