面试题答案
一键面试fn longer_string<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() > s2.len() {
s1
} else {
s2
}
}
生命周期标注解释
- 标注
'a
:在函数签名fn longer_string<'a>(s1: &'a str, s2: &'a str) -> &'a str
中,定义了一个生命周期参数'a
。这个'a
代表了s1
和s2
切片的生命周期,并且返回值的生命周期也和s1
与s2
中较短的那个生命周期一样长。 - 必要性:Rust 的借用检查器需要明确知道所有引用的生命周期关系,以确保在引用被使用时,其指向的数据仍然有效。这里通过将输入参数和返回值标注为相同的生命周期
'a
,表明返回的字符串切片的生命周期不会超过输入的两个字符串切片中生命周期较短的那个。如果不进行这样的标注,借用检查器无法确定返回值的生命周期与输入值的生命周期关系,会导致编译错误。