我有以下代码:
pub trait GetIdentifier {
//...
}
impl<T: GetIdentifier> Hash for T {
fn hash(&self) -> //....
}
我收到以下错误:
error[E0119]: conflicting implementations of trait `std::hash::Hash` for type `&_`:
--> <anon>:18:1
|
18 | / impl<T: GetIdentifier> Hash for T {
19 | | }
| |_^
|
= note: conflicting implementation in crate `core`
error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g. `MyStruct<T>`); only traits defined in the current crate can be implemented for a type parameter
--> <anon>:18:1
|
18 | / impl<T: GetIdentifier> Hash for T {
19 | | }
| |_^
为什么呢?我没有为GetIdentifier
实施&_
,因此一揽子impl
不应适用于&_
。我的箱子的消费者也无法为核心类型实施GetIdentifier
,所以没有问题。我在这里错过了什么?为什么&_
甚至涉及到这里 - 我没有对我的特性施加?Sized
限制,所以甚至不应该考虑引用......对吧?
答案 0 :(得分:1)
您的箱子的消费者可以为ACME A
实施GetIdentifier
,同时为TheirType
实施Hash
。
现在你可能会说这是他们的问题,但想象另一个具有特征TheirType
的箱子Foo
,impl<T: Foo> Hash for T {}
实施TheirType
和{ {1}}。突然间,他们无法实现这两种特质。
Foo
发生错误的原因是stdlib impl表示实现GetIdentifier
的任何类型&_
都会导致T
同时实施Hash
。