面试题答案
一键面试fn longer_slice<'a>(slice1: &'a str, slice2: &'a str) -> &'a str {
if slice1.len() > slice2.len() {
slice1
} else {
slice2
}
}
生命周期参数标注解释
- 标注
'a
的原因:- 在Rust中,当函数的参数和返回值涉及到引用时,需要明确标注生命周期参数,以确保编译器能够验证引用的有效性。
- 这里的
'a
生命周期参数标注在两个输入参数slice1
和slice2
以及返回值上,表示函数返回的引用的生命周期与传入的两个引用的生命周期中较短的那个相同。 - 因为返回的引用要么是
slice1
,要么是slice2
,所以返回的引用的生命周期不能超过slice1
和slice2
中任何一个的生命周期。如果不标注生命周期参数,编译器无法确定返回引用的生命周期范围,会报错。这样标注后,编译器能够根据传入引用的生命周期来验证返回引用的有效性,确保程序不会出现悬垂引用的问题。