Iterator+Clone 的实现特征:实现冲突
Implement trait for Iterator+Clone: conflicting implementations
我想为 Iterator
实现特征 Foo
(即,对于实现 Iterator
的所有类型),所以我写了这个:
trait Foo {
fn foo(&self);
}
impl<F, FI> Foo for FI
where F: Foo,
FI: Iterator<Item=F> + Clone,
{
fn foo(&self) {
// Just for demonstration
for x in self.clone() {
x.foo();
}
}
}
至此,编译成功。但是,当我另外为另一种类型实现 Foo
时,比如
impl Foo for u32 {
fn foo(self) { println!("{} u32", self); }
}
我收到以下错误消息:
t.rs:5:1: 7:2 error: conflicting implementations for trait `Foo` [E0119]
t.rs:5 impl Foo for u32 {
t.rs:6 fn foo(self) { println!("{} u32", self); }
t.rs:7 }
t.rs:9:1: 18:2 note: note conflicting implementation here
t.rs:9 impl<F, FI> Foo for FI
t.rs:10 where F: Foo,
t.rs:11 FI: Iterator<Item=F> + Clone,
t.rs:12 {
t.rs:13 fn foo(&self) {
t.rs:14 for x in self.clone() {
我该如何解决这个问题?
简而言之,你不能。由于您无法确保 u32
不会在某个时候实现 Iterator
,因此实现确实会发生冲突。如果你真的想为 Iterator
和 u32
实现它,你将不得不以某种方式将实现分开。一种方法是改为为 &'a FI
实现它,因为 u32
永远不会成为参考。或者,您可以将迭代器包装在一个结构中,尽管这会使其使用起来稍微不符合人体工程学。
我想为 Iterator
实现特征 Foo
(即,对于实现 Iterator
的所有类型),所以我写了这个:
trait Foo {
fn foo(&self);
}
impl<F, FI> Foo for FI
where F: Foo,
FI: Iterator<Item=F> + Clone,
{
fn foo(&self) {
// Just for demonstration
for x in self.clone() {
x.foo();
}
}
}
至此,编译成功。但是,当我另外为另一种类型实现 Foo
时,比如
impl Foo for u32 {
fn foo(self) { println!("{} u32", self); }
}
我收到以下错误消息:
t.rs:5:1: 7:2 error: conflicting implementations for trait `Foo` [E0119]
t.rs:5 impl Foo for u32 {
t.rs:6 fn foo(self) { println!("{} u32", self); }
t.rs:7 }
t.rs:9:1: 18:2 note: note conflicting implementation here
t.rs:9 impl<F, FI> Foo for FI
t.rs:10 where F: Foo,
t.rs:11 FI: Iterator<Item=F> + Clone,
t.rs:12 {
t.rs:13 fn foo(&self) {
t.rs:14 for x in self.clone() {
我该如何解决这个问题?
简而言之,你不能。由于您无法确保 u32
不会在某个时候实现 Iterator
,因此实现确实会发生冲突。如果你真的想为 Iterator
和 u32
实现它,你将不得不以某种方式将实现分开。一种方法是改为为 &'a FI
实现它,因为 u32
永远不会成为参考。或者,您可以将迭代器包装在一个结构中,尽管这会使其使用起来稍微不符合人体工程学。