首页 > 解决方案 > 如何通过另一个特征扩展 IntoIterator?

问题描述

我正在尝试定义一个扩展 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);
    }
}

标签: rusttraits

解决方案


我想你想要的是这样的:

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

这意味着:实现你的 trait 的所有东西也实现IntoIterator了 where the Itemis i32。或者换一种说法:所有的实现者MyTrait也可以变成i32s 上的迭代器。


推荐阅读