如何为任何可迭代类型实现特征?
How to implement a trait for any iterable type?
我想实现一个通用方法,该方法可在迭代特定类型的任何容器或迭代器上调用,例如&[u32]
、Vec<u32>
、(0..99u32)
等
The following code 不编译:
trait Foo { fn foo(self); }
impl Foo for std::iter::IntoIterator<Item=u32> {
fn foo(self) {}
}
error: the value of the associated type IntoIter
(from the trait core::iter::IntoIterator
) must be specified [E0191]
impl Foo for std::iter::IntoIterator<Item=u32> {
IntoIter
关联类型需要指定什么? (std::iter::IntoIterator<Item=u32,IntoIter=???>
)
这样就可以了:
vec![0u32].foo()
这里正确的语法是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()
}
我想实现一个通用方法,该方法可在迭代特定类型的任何容器或迭代器上调用,例如&[u32]
、Vec<u32>
、(0..99u32)
等
The following code 不编译:
trait Foo { fn foo(self); }
impl Foo for std::iter::IntoIterator<Item=u32> {
fn foo(self) {}
}
error: the value of the associated type
IntoIter
(from the traitcore::iter::IntoIterator
) must be specified [E0191]impl Foo for std::iter::IntoIterator<Item=u32> {
IntoIter
关联类型需要指定什么? (std::iter::IntoIterator<Item=u32,IntoIter=???>
)
这样就可以了:
vec![0u32].foo()
这里正确的语法是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()
}