missing lifetime specifier [E0106] on function signature

前端 未结 1 902
醉梦人生
醉梦人生 2020-12-11 17:31

I\'m pretty confused by the errors from this simple code (Playground):

fn main() {
    let a = fn1(\"test123\");
}

fn fn1(a1: &str) -> &str {
            


        
相关标签:
1条回答
  • 2020-12-11 17:54

    A long time ago, when a function returned a borrowed pointer, the compiler inferred the 'static lifetime, so fn2 would compile successfully. Since then, lifetime elision has been implemented. Lifetime elision is a process where the compiler will automatically link the lifetime of an input parameter to the lifetime of the output value without having to explicitly name it.

    For example, fn1, without lifetime elision, would be written like this:

    fn fn1<'a>(a1: &'a str) -> &'a str {
        let a = fn2();
        a
    }
    

    However, fn2 has no parameters that are borrowed pointers or structs with lifetime parameters (indeed, it has no parameters at all). You must therefore mention the lifetime explicitly. Since you're returning a string literal, the correct lifetime is 'static (as suggested by the compiler).

    fn fn2() -> &'static str {
        "12345abc"
    }
    
    0 讨论(0)
提交回复
热议问题