性状具有生存期参数是什么意思?

问题描述 投票:4回答:1

我了解生命周期参数如何应用于函数和结构,但是trait具有生命周期参数意味着什么?是将生命周期参数引入其方法的捷径,还是其他?

rust traits lifetime
1个回答
6
投票

如果您有一个具有生命周期限制的特征,那么该特征的implementors可以参与相同的生命周期。具体而言,这使您可以存储具有该生存期的引用。它是not用于在成员方法上指定生存期的快捷方式,而那样的困难和令人困惑的错误消息就是这样!

trait Keeper<'a> {
    fn save(&mut self, v: &'a u8);
    fn restore(&self) -> &'a u8;
}

struct SimpleKeeper<'a> {
    val: &'a u8,
}

impl<'a> Keeper<'a> for SimpleKeeper<'a> {
    fn save(&mut self, v: &'a u8) {
        self.val = v
    }
    fn restore(&self) -> &'a u8 {
        self.val
    }
}

请注意如何在生命周期中同时对结构和特征进行参数化,并且该生命周期是相同的>>。

save()restore()的非特征版本对于SimpleKeeper<'a>会是什么样?

实际上非常相似。重要的部分是该结构本身存储了引用,因此它需要为其中的值具有生命周期参数。

struct SimpleKeeper<'a> {
    val: &'a u8,
}

impl<'a> SimpleKeeper<'a> {
    fn save(&mut self, v: &'a u8) {
        self.val = v
    }
    fn restore(&self) -> &'a u8 {
        self.val
    }
}

它们的含义与特征版本完全一样吗?

是!

© www.soinside.com 2019 - 2024. All rights reserved.