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

时间:2015-04-30 19:11:20

标签: rust traits lifetime

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

1 个答案:

答案 0 :(得分:5)

如果您有一个具有生命周期限制的特征,那么该特征的实现者可以参与相同的生命周期。具体而言,这允许您存储具有该生命周期的引用。 是指定成员方法生命周期的快捷方式,疯狂和混乱的错误消息就是这样!

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

注意结构和特征在生命周期中是如何参数化的,并且生命周期是相同的

  

对于SimpleKeeper&lt;&#39; a&gt ;?,save()和restore()的非特征版本会是什么样子?

实际上非常相似。重要的一点是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 }
}
  

他们的意思与特质版本完全相同吗?

是的!