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

时间:2015-12-25 23:39:07

标签: iterator rust traits generic-programming generic-collections

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

The following code无法编译:

trait Foo { fn foo(self); }

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

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

impl Foo for std::iter::IntoIterator<Item=u32> {

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

这样就可以了:

vec![0u32].foo()

1 个答案:

答案 0 :(得分:3)

这里的正确语法是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()
}