面试题答案
一键面试// 定义trait
trait SumElementsTrait<T> {
fn sum_elements(&self) -> T;
}
// 为实现了Add和Copy的泛型类型T实现SumElementsTrait
impl<T> SumElementsTrait<T> for Vec<T>
where
T: std::ops::Add<Output = T> + Copy,
{
fn sum_elements(&self) -> T {
self.iter().cloned().fold(T::default(), |acc, x| acc + x)
}
}
fn main() {
let numbers: Vec<i32> = vec![1, 2, 3, 4, 5];
let sum = numbers.sum_elements();
println!("Sum: {}", sum);
// 在使用时,只要类型T实现了Add和Copy,就可以调用sum_elements方法
// 例如这里的i32类型,它实现了Add和Copy,所以可以成功调用
}