我有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 不接受这一点吗?
因为
<First as Test>::Exec
可能是 SecondArgument
,此时您将实现 From<SecondArgument> for SecondArgument
,这与总体 From<T> for T
实现相冲突。