如何为任何可迭代类型实现特征?

Kor*_*nel 4 iterator traits generic-programming generic-collections rust

我想实现一个可在任何容器或迭代器上调用的通用方法,该方法可以迭代特定类型,例如&[u32]Vec<u32>(0..99u32)等。

以下代码无法编译:

trait Foo { fn foo(self); }

impl Foo for std::iter::IntoIterator<Item=u32> {
    fn foo(self) {}
}
Run Code Online (Sandbox Code Playgroud)

错误:必须指定关联类型的值IntoIter(来自 Trait )[E0191]core::iter::IntoIterator

impl Foo for std::iter::IntoIterator<Item=u32> {
Run Code Online (Sandbox Code Playgroud)

关联类型需要指定什么IntoIter?( std::iter::IntoIterator<Item=u32,IntoIter=???>)

这样就可以了:

vec![0u32].foo()
Run Code Online (Sandbox Code Playgroud)

Luk*_*odt 7

这里正确的语法是impl<T> SomeTrait for T where T: OtherTrait. 这有效:

trait Foo { fn foo(self); }

impl<T> Foo for T 
    where T: std::iter::IntoIterator<Item=u32> 
{
    fn foo(self) {}
}

fn main() {
    vec![0u32].foo()
}
Run Code Online (Sandbox Code Playgroud)