2015-04-05 29 views
2

條款我寫了下面的函數來求和的迭代器:簡化與地方重複相關類型限制

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)  
} 

這下rustc-1.0.0-β編譯罰款,但是這將是很好,如果能避免重複I::Item四次,而是指一個類型T,並說只有一次Iterator::Item = T只有一次。什麼是正確的方法來做到這一點?

回答

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)  
}