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
Run Code Online (Sandbox Code Playgroud)impl Foo for std::iter::IntoIterator<Item=u32> {
关联类型需要指定什么IntoIter
?( std::iter::IntoIterator<Item=u32,IntoIter=???>
)
这样就可以了:
vec![0u32].foo()
Run Code Online (Sandbox Code Playgroud)
这里正确的语法是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)