gpt4 book ai didi

rust - 为什么我需要在 “cover”中使用 `impl ForeignTrait for T` T [E0210]

转载 作者:行者123 更新时间:2023-12-03 11:39:24 25 4
gpt4 key购买 nike

今天,我遇到了一个非常奇怪的错误消息,我很难理解。考虑一下这种简单的类似于 map 条目的结构:

struct Entry<K, V> {
key: K,
value: V
}
现在,我想实现 std::cmp与自身之间以及 Entry<K, V>之间的所有 K特性。现在让我们专注于 PartialEq。这两个实现工作正常:
impl<K: PartialEq, V> PartialEq for Entry<K, V> { /* ... */ }
impl<K: PartialEq, V> PartialEq<K> for Entry<K, V> { /* ... */ }
但是最后一个让我很难受( Playground)
impl<K: PartialEq, V> PartialEq<Entry<K, V>> for K {
fn eq(&self, other: &Entry<K, V>) -> bool {
self.eq(&other.key)
}
}
据我所知,该错误消息声称我将使用非本地类型作为外来特征的第一个参数。但是, Entry ist在同一文件中本地定义。

error[E0210]: type parameter K must be covered by another type when it appears before the first local type (Entry<K, V>)

--> src/lib.rs:6:6
|
6 | impl<K: PartialEq, V> PartialEq<Entry<K, V>> for K {
| ^ type parameter `K` must be covered by another type when it appears before the first local type (`Entry<K, V>`)
|

note: implementing a foreign trait is only possible if at least one of the types for which is it implemented is local, and no uncovered type parameters appear before that first local type
note: in this case, 'before' refers to the following order: impl<..> ForeignTrait<T1, ..., Tn> for T0, where T0 is the first and Tn is the last


有人可以解释为什么我收到此错误消息,该错误是什么,尤其是未发现的错误是什么,以及为什么不允许这种实现?

最佳答案

我想您想反过来:

impl<K: PartialEq, V> PartialEq<K> for Entry<K, V> {
fn eq(&self, other: &K) -> bool {
self.key.eq(&other)
}
}
至于为什么您的方向不起作用:假设有人定义了一个 struct,可以将其与任何内容进行比较:
struct K;

impl<V> PartialEq<V> for K { // V could be anything (including your struct Entry)
fn eq(&self, other: &V) -> bool {
true
}
}
现在, impl和您的 K将会存在相互冲突的 Entry

关于rust - 为什么我需要在 “cover”中使用 `impl ForeignTrait<LocalType> for T` T [E0210],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63119000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com