如何通过另一个特征扩展 IntoIterator?

How to extend IntoIterator by another trait?

我正在尝试定义一个扩展 IntoIterator 的特征,以实现类似于下面代码的功能,但是“关联类型默认值不稳定”(https://github.com/rust-lang/rust/issues/29661)。

还有其他方法可以实现吗?

pub trait MyTrait : IntoIterator{
    type Item = i32;
    fn foo(&self);
}

pub fn run<M: MyTrait>(my : M){
    my.foo();
    for a in my {
        println!("{}", a);
    }
}

我想你想要的是这个:

trait MyTrait: IntoIterator<Item = i32> {
    fn foo(&self);
}

这意味着:所有实现了你的特征的东西也实现了 IntoIterator,其中 Itemi32。或者换句话说:MyTrait 的所有实现者也可以变成 i32 上的迭代器。