@@ -29,7 +29,7 @@ use std::ops::{Add, Div, Mul, Neg, Sub, Rem};
29
29
use std:: iter:: { Sum , Product } ;
30
30
use std:: str:: FromStr ;
31
31
32
- use traits:: { Zero , One , Num , NumAssign , Inv , Float } ;
32
+ use traits:: { Zero , One , Num , Inv , Float } ;
33
33
34
34
// FIXME #1284: handle complex NaN & infinity etc. This
35
35
// probably doesn't map to C's _Complex correctly.
@@ -1070,43 +1070,27 @@ impl<T: Num + Clone> Num for Complex<T> {
1070
1070
}
1071
1071
}
1072
1072
1073
- impl < T : Clone + NumAssign > Sum for Complex < T > {
1073
+ impl < T : Num + Clone > Sum for Complex < T > {
1074
1074
fn sum < I > ( iter : I ) -> Self where I : Iterator < Item = Self > {
1075
- let mut s = Self :: zero ( ) ;
1076
- for c in iter {
1077
- s += c;
1078
- }
1079
- s
1075
+ iter. fold ( Self :: zero ( ) , |acc, c| acc + c)
1080
1076
}
1081
1077
}
1082
1078
1083
- impl < ' a , T : ' a + Clone + NumAssign > Sum < & ' a Complex < T > > for Complex < T > {
1079
+ impl < ' a , T : ' a + Num + Clone > Sum < & ' a Complex < T > > for Complex < T > {
1084
1080
fn sum < I > ( iter : I ) -> Self where I : Iterator < Item = & ' a Complex < T > > {
1085
- let mut s = Self :: zero ( ) ;
1086
- for c in iter {
1087
- s += c;
1088
- }
1089
- s
1081
+ iter. fold ( Self :: zero ( ) , |acc, c| acc + c)
1090
1082
}
1091
1083
}
1092
1084
1093
- impl < T : Clone + NumAssign > Product for Complex < T > {
1085
+ impl < T : Num + Clone > Product for Complex < T > {
1094
1086
fn product < I > ( iter : I ) -> Self where I : Iterator < Item = Self > {
1095
- let mut s = Self :: one ( ) ;
1096
- for c in iter {
1097
- s *= c;
1098
- }
1099
- s
1087
+ iter. fold ( Self :: one ( ) , |acc, c| acc * c)
1100
1088
}
1101
1089
}
1102
1090
1103
- impl < ' a , T : ' a + Clone + NumAssign > Product < & ' a Complex < T > > for Complex < T > {
1091
+ impl < ' a , T : ' a + Num + Clone > Product < & ' a Complex < T > > for Complex < T > {
1104
1092
fn product < I > ( iter : I ) -> Self where I : Iterator < Item = & ' a Complex < T > > {
1105
- let mut s = Self :: one ( ) ;
1106
- for c in iter {
1107
- s *= c;
1108
- }
1109
- s
1093
+ iter. fold ( Self :: one ( ) , |acc, c| acc * c)
1110
1094
}
1111
1095
}
1112
1096
0 commit comments