MST

星途 面试题库

面试题:Rust trait扩展方法中的泛型与约束

在Rust中,为一个泛型类型`T`实现trait扩展方法,要求`T`必须实现`Add`和`Copy` trait。实现一个`sum_elements`方法,用于计算`Vec<T>`中所有元素的和。请写出完整的trait定义、impl块以及如何在使用时确保类型满足约束条件。
36.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义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,所以可以成功调用
}