MST

星途 面试题库

面试题:Rust 特型约束下的泛型函数及类型关系处理

给定一个 Rust 特型 `Addable`,它有一个方法 `add` 用于两个实现该特型类型的相加操作。编写一个泛型函数 `sum`,该函数接受一个实现了 `Addable` 特型的类型的 `Vec`,返回它们相加的结果。同时,解释在这个泛型函数中,如何通过特型约束来定义不同具体类型之间的关系,以及这种关系在函数调用时是如何体现的。
12.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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 操作。