我理解生命周期参数如何应用于函数和结构,但是 trait 具有生命周期参数意味着什么?将生命周期参数引入其方法是一种捷径,还是其他什么?
如果您有一个具有生命周期限制的特征,那么该特征的实现者可以参与相同的生命周期 . 具体而言,这允许您存储具有该生命周期的引用 . 它是 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 } }
请注意struct和trait在生命周期中是如何参数化的,以及生命周期 is the same .
对于SimpleKeeper <'a>,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 } }
他们的意思与特质版本完全相同吗?
是的!
1 回答
如果您有一个具有生命周期限制的特征,那么该特征的实现者可以参与相同的生命周期 . 具体而言,这允许您存储具有该生命周期的引用 . 它是 not 用于指定成员方法生命周期的快捷方式,疯狂和混乱的错误消息就是这样!
请注意struct和trait在生命周期中是如何参数化的,以及生命周期 is the same .
实际上非常相似 . 重要的部分是struct存储引用本身,因此它需要为内部值赋予一个生命周期参数 .
是的!