类型 <T><T> 的特征 From

问题描述 投票:0回答:1

我有3个箱子。

  • trait-def
    具有特征定义:
    pub trait Test {
         type Exec;
    }
    
  • under
    首次实现类型的特征

  pub struct First;
  pub struct FirstArgument;

  impl Test for First {
      type Exec = FirstArgument;
  }
  • over
    针对另一种类型的特征的第二次实现

  pub struct Second;
  pub struct SecondArgument;

  impl Test for Second {
      type Exec = SecondArgument;
  }

到这里为止,一切都还好。 然而,当尝试实现一个简单的

From
时,事情就出现了偏差:

impl From<<First as Test>::Exec> for SecondArgument {
    fn from(value: <First as Test>::Exec) -> Self {
        Self
    }
}

它说:

error[E0119]: conflicting implementations of trait `std::convert::From<SecondArgument>` for type `SecondArgument`
   |
13 | impl From<<First as Test>::Exec> for SecondArgument {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: conflicting implementation in crate `core`:
           - impl<T> std::convert::From<T> for T;

这是一个非常简化的示例,我不能因为不相关的原因而仅仅实现

From<FirstArgument> for SecondArgument

我知道您必须小心使用具有特征的 From 的实现,但这里一切都是一成不变的,我没有使用泛型类型。有人知道为什么 Rust 不接受这一点吗?谢谢你!

rust traits
1个回答
0
投票

有人知道为什么 Rust 不接受这一点吗?

因为

<First as Test>::Exec
可能是
SecondArgument
,此时您将实现
From<SecondArgument> for SecondArgument
,这与总体
From<T> for T
实现相冲突。

© www.soinside.com 2019 - 2024. All rights reserved.