代码之家  ›  专栏  ›  技术社区  ›  EloiGG

在rust中使用From<T>和泛型T

  •  0
  • EloiGG  · 技术社区  · 4 年前

    我正在尝试实现一个错误枚举,它可以包含与我们的一个特征相关的错误,如下所示:

    trait Storage {
        type Error;
    }
    
    enum MyError<S: Storage> {
        StorageProblem(S::Error),
    }
    

    我还尝试实施 From 允许构建的特性 MyError 来自 Storage::Error :

    impl<S: Storage> From<S::Error> for MyError<S> {
        fn from(error: S::Error) -> MyError<S> {
            MyError::StorageProblem(error)
        }
    }
    

    ( playground )

    但是,这无法编译:

    error[E0119]: conflicting implementations of trait `std::convert::From<MyError<_>>` for type `MyError<_>`:
     --> src/lib.rs:9:1
      |
    9 | impl<S: Storage> From<S::Error> for MyError<S> {
      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      |
      = note: conflicting implementation in crate `core`:
              - impl<T> std::convert::From<T> for T;
    

    我不明白为什么编译器认为这已经实现了。错误消息告诉我 From<MyError<_>> (确实如此),但我并没有试图在这里实现它——我正在努力实现 From<S::Error> 和 MyError 与类型不同 S::Error 从我所看到的。

    我是不是遗漏了一些泛型的基本内容?

    0 回复  |  直到 7 年前