MST
星途 面试题库

面试题:Rust函数的生命周期与泛型参数

定义一个Rust函数,它接受两个切片作为参数,切片元素类型为泛型 `T`,同时这两个切片具有不同的生命周期 `'a` 和 `'b`。函数需要在这两个切片中找到相同的第一个元素并返回。请给出完整的函数定义,包括泛型和生命周期的标注,并且说明为什么要这样标注生命周期和泛型参数。
40.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn find_common_first<T: PartialEq>(slice1: &'a [T], slice2: &'b [T]) -> Option<&'a T> {
    for item1 in slice1 {
        for item2 in slice2 {
            if item1 == item2 {
                return Some(item1);
            }
        }
    }
    None
}
  • 泛型参数 T:使用泛型 T 是因为我们不知道切片中元素的具体类型,只知道它们需要实现 PartialEq 特性,这样才能在函数内部进行相等性比较。如果不使用泛型,就需要针对每一种可能的类型都写一个函数,泛型极大地提高了代码的复用性。
  • 生命周期参数 'a'b:生命周期参数 'a'b 分别标注了两个切片的生命周期。因为切片可能有不同的生命周期,明确标注生命周期可以让编译器更好地进行借用检查。返回值类型为 Option<&'a T>,表示返回的元素的生命周期和 slice1 是一样的,因为返回的是 slice1 中的元素引用。如果不标注生命周期,编译器无法确定返回值的生命周期与输入切片生命周期之间的关系,会导致编译错误。