问题描述: 在编写一组用于f64、f32、i32、i64数组的通用数学工具函数时,遇到了一些问题。
解决方法:
fn sum + Default>(arr: &[T]) -> T {
arr.iter().fold(T::default(), |acc, x| acc + *x)
}
trait MathFunctions {
fn sum(&self) -> Self;
}
impl MathFunctions for [f64] {
fn sum(&self) -> Self {
self.iter().sum()
}
}
impl MathFunctions for [f32] {
fn sum(&self) -> Self {
self.iter().sum()
}
}
impl MathFunctions for [i32] {
fn sum(&self) -> Self {
self.iter().sum()
}
}
impl MathFunctions for [i64] {
fn sum(&self) -> Self {
self.iter().sum()
}
}
然后可以通过调用对应的sum函数来计算数组的和:
fn main() {
let arr_f64 = [1.0, 2.0, 3.0];
let arr_f32 = [1.0f32, 2.0f32, 3.0f32];
let arr_i32 = [1, 2, 3];
let arr_i64 = [1, 2, 3];
let sum_f64 = arr_f64.sum();
let sum_f32 = arr_f32.sum();
let sum_i32 = arr_i32.sum();
let sum_i64 = arr_i64.sum();
println!("Sum of arr_f64: {}", sum_f64);
println!("Sum of arr_f32: {}", sum_f32);
println!("Sum of arr_i32: {}", sum_i32);
println!("Sum of arr_i64: {}", sum_i64);
}
这样就可以根据不同的数组类型调用相应的sum函数,实现通用的数学工具函数。