繁体   English   中英

特征具有生命周期参数意味着什么?

[英]What does it mean for a trait to have a lifetime parameter?

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

如果您有一个具有生命周期限制的特征,那么该特征的实现者可以参与相同的生命周期。 具体来说,这允许您存储具有该生命周期的引用。 不是在成员方法上指定生命周期的捷径,困难和令人困惑的错误消息就是这样!

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
    }
}

请注意 struct 和 trait 如何在生命周期中参数化,并且生命周期是相同的

对于SimpleKeeper<'a>save()restore()的非特征版本SimpleKeeper<'a>

实际上非常相似。 重要的部分是 struct 存储引用本身,因此它需要为内部值提供生命周期参数。

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
    }
}

它们的意思是否与 trait 版本完全相同?

是的!

暂无
暂无

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

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