我理解生命周期参数如何应用于函数和结构,但特征具有生命周期参数意味着什么?是将生命周期参数引入其方法的快捷方式,还是其他的?
答案 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 }
}
注意结构和特征在生命周期中是如何参数化的,并且生命周期是相同的。
实际上非常相似。重要的一点是struct存储引用本身,因此它需要有一个内部值的生命周期参数。对于SimpleKeeper&lt;&#39; a&gt ;?,save()和restore()的非特征版本会是什么样子?
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 }
}
他们的意思与特质版本完全相同吗?
是的!