Rust 如何结合它的多个生命周期?

Fra*_*eng 5 rust

代码如下:

fn inner<'a:'b, 'b>(x:&'a i32, _y:&'b i32) -> &'b i32 {
    x
}

fn main() {
  let a = 1;
  {
      let b = 2;
      inner(&b, &a);
      inner(&a, &b);
  }
}
Run Code Online (Sandbox Code Playgroud)

'a:'b函数中的边界inner意味着生命周期'a持续时间超过'b。在上面的例子中,变量的生命周期比ba。借用检查器在遇到inner(&b, &a). 但是,代码可以编译。有人可以提供一些解释吗?

Sve*_*ach 4

生命周期注释描述了借用变量的生命周期,而不是借用变量的生命周期。在对 的两次调用中inner(),所有借用都会持续到调用结束,因此编译器可以推断出它们相同的生命周期,因此'a: 'b在两种情况下都满足了界限。