面试题答案
一键面试fn longer<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() > s2.len() {
s1
} else {
s2
}
}
生命周期处理原因
- 函数签名中的
<'a>
:声明了一个生命周期参数'a
。这个参数表示输入的两个字符串切片s1
和s2
的生命周期。 - 返回值的生命周期:返回值
&'a str
的生命周期也被指定为'a
。这意味着返回的字符串切片的生命周期与输入的两个字符串切片中较短的那个生命周期相同。因为函数内部只是返回传入的其中一个字符串切片,所以返回值的生命周期不能超过输入切片的生命周期。这样做确保了在函数调用结束后,返回的字符串切片仍然有效,不会引用到已经释放的内存。如果不指定这个生命周期参数,Rust编译器会无法确定返回值与输入值之间的生命周期关系,从而报错。