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
中的元素引用。如果不标注生命周期,编译器无法确定返回值的生命周期与输入切片生命周期之间的关系,会导致编译错误。