我编写了以下函数来总结迭代器:
use std::ops::Add;
fn sum_iter<I>(s: I, init: &I::Item) -> I::Item
where
I: Iterator + Clone,
<I as Iterator>::Item: Add<I::Item, Output = I::Item> + Copy,
{
s.clone().fold(*init, |acc, item| acc + item)
}
使用Rust 1.0.0可以很好地编译,但是如果可以避免重复I::Item
四次而是引用类型T
并在某处仅Iterator::Item = T
说这样会很好一旦。什么是正确的方法?
答案 0 :(得分:3)
您可以添加T
作为您的函数的类型参数,并需要I
来实现Iterator<Item = T>
,如下所示:
fn sum_iter<I, T>(s: I, init: &T) -> T
where
I: Iterator<Item = T> + Clone,
T: Add<T, Output = T> + Copy,
{
s.clone().fold(*init, |acc, item| acc + item)
}