面试题答案
一键面试trait Addable {
fn add(&self, other: &Self) -> Self;
}
fn sum<T: Addable>(vec: &Vec<T>) -> T {
let mut result = vec[0].clone();
for item in vec.iter().skip(1) {
result = result.add(item);
}
result
}
在这个泛型函数 sum
中,通过特型约束 T: Addable
来定义不同具体类型之间的关系。这意味着泛型类型 T
必须实现 Addable
特型,也就强制了所有传入 sum
函数的 Vec
中的元素类型都必须有 add
方法。
在函数调用时,当传入一个实现了 Addable
特型的类型的 Vec
时,编译器会检查这个类型是否确实实现了 Addable
特型。如果实现了,函数就可以正常调用 add
方法进行相加操作;如果没有实现,编译器会报错,确保类型安全。例如,如果有一个 MyType
类型实现了 Addable
特型,调用 sum(&vec![MyType; 10])
时,编译器会验证 MyType
是否实现了 Addable
,若实现则可以顺利执行 sum
函数中的 add
操作。