'a:'a 在通用生命周期参数中的含义是什么?

iDu*_*Jie 40 lifetime rust

我有一段奇怪的代码:

#![allow(unused)]

fn f<'a>() {}
fn g<'a: 'a>() {}

fn main() {
    // let pf = f::<'static> as fn(); // (7)
    let pg = g::<'static> as fn();    // (8)
    //print!("{}", pf == pg);
}
Run Code Online (Sandbox Code Playgroud)

第7行如果没有注释就不能编译(有下面的错误),但是第8行可以编译。

#![allow(unused)]

fn f<'a>() {}
fn g<'a: 'a>() {}

fn main() {
    // let pf = f::<'static> as fn(); // (7)
    let pg = g::<'static> as fn();    // (8)
    //print!("{}", pf == pg);
}
Run Code Online (Sandbox Code Playgroud)

'a: 'a第4行是什么意思?

Ras*_*Kaj -5

in只是一个名字a'a您可以调用它'mylifetime,或者'golden_eternal_braid如果您愿意的话。该位置的任何生命周期参数的含义只是声明它。除全局之外的生命周期'static均未定义,因此您不能将函数声明为

fn f(param: &'a SomeType) {} // error
Run Code Online (Sandbox Code Playgroud)

...但是如果您声明它,您可以:

fn f<'a>(param: &'a SomeType) {} // ok
Run Code Online (Sandbox Code Playgroud)

当然,您也可以将生命周期留给推断,将函数声明为

fn f(param: &SomeType) {}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白这如何回答 `g&lt;'a: 'a&gt;` 的含义。 (5认同)
  • 那么为什么需要它来编译问题中的代码呢?所以这不是没有意义的,而是有意义的。 (5认同)