我希望为Iterator
(即所有实现了Iterator
的类型)实现一个特性Foo
,所以我写了以下代码:
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() {
我该怎么解决这个问题?
&'a u32
在某个时候不会实现Iterator
呢?我认为这并没有真正解释为什么引用的impling有效? - mako