MST

星途 面试题库

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

编写一个Rust泛型函数,该函数接受两个字符串切片(`&str`),并返回其中较长的一个。请正确处理生命周期问题,确保函数在所有合法输入下都能正常工作。同时说明你这样处理生命周期的原因。
27.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn longer<'a>(s1: &'a str, s2: &'a str) -> &'a str {
    if s1.len() > s2.len() {
        s1
    } else {
        s2
    }
}

生命周期处理原因

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