面试题答案
一键面试fn sum<T: std::ops::Add<Output = T> + Copy>(slice: &[T]) -> T {
slice.iter().copied().fold(T::default(), |acc, val| acc + val)
}
在Rust中,当函数接收一个切片引用 &[T]
作为参数时,类型推断机制会根据实际传入切片的元素类型来确定 T
的具体类型。只要传入的切片元素类型实现了 std::ops::Add
trait 以及 Copy
trait(因为 fold
方法使用了 copied
,需要 Copy
),Rust就能正确推断出 T
的类型,使得函数能够正常工作。 例如,如果传入一个 &[i32]
切片,Rust 会推断 T
为 i32
,因为 i32
类型实现了 std::ops::Add
和 Copy
trait。