繁体   English   中英

价值的生命周期与借贷的生命周期

[英]Lifetime of a value vs lifetime of a borrow

我设法编写并编译了以下代码:

trait Runner {}

struct Human {}

impl Runner for Human {}

struct Player<'a, T>
where
    T: Runner + 'a,
{
    t: &'a T,
}

impl<'a, T> AsRef<T> for Player<'a, T>
where
    T: Runner + 'a,
{
    fn as_ref(&self) -> &T {
        self.t
    }
}

fn main() {}

我的理解是,在struct Player的定义, T一些实现特征的具体类型RunnerT的寿命'a长。 t是借入T ,借入也'a长。

这种理解正确吗?

impl AsRef for Player的定义中,编译器如何知道返回的as_ref的生存期为T (从as_ref ),其中T的生存期为'a需要小于或等于'a self借钱的寿命是多长?

如果编译器可以确保引用的结构T的字段超过T的生存期,则Rust将成功构建。

使用这样的Player定义:

struct Player<'a, T>
where
    T: Runner + 'a,
{
    t: &'a T,
}
  1. 我们用'a的寿命t命名。

  2. 随着T: Runner + 'a我们宣布T实现了Runner ,并在所有的(最终)引用T必须活得比'a

出于上述考虑,如果t生命周期为'aPlayer值的生命周期严格小于'a

让我们将'b这样的Player值生存期命名为,然后: 'b < 'a

为避免终身 as_ref ,我们可以将as_ref重写为:

fn as_ref<'b>(&'b self) -> &'b T {
    self.t
}

self借贷和返回&T的生命周期严格来说是'a较小生命。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM