特征具有生命周期参数意味着什么?
What does it mean for a trait to have a lifetime parameter?
我了解生命周期参数如何应用于函数和结构,但是 trait 具有生命周期参数意味着什么?在其方法中引入生命周期参数是一种捷径,还是别的什么?
如果你有一个有生命周期限制的特性,那么特性的 实现者 可以参与相同的生命周期。具体来说,这允许您存储具有该生命周期的引用。它不是在成员方法上指定生命周期的快捷方式,困难和令人困惑的错误消息就在于此!
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
}
}
注意结构和特征是如何在生命周期中被参数化的,生命周期是相同的。
What would the non-trait versions of save()
and restore()
look like for 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
}
}
And would they mean exactly the same thing as the the trait version?
是的!
我了解生命周期参数如何应用于函数和结构,但是 trait 具有生命周期参数意味着什么?在其方法中引入生命周期参数是一种捷径,还是别的什么?
如果你有一个有生命周期限制的特性,那么特性的 实现者 可以参与相同的生命周期。具体来说,这允许您存储具有该生命周期的引用。它不是在成员方法上指定生命周期的快捷方式,困难和令人困惑的错误消息就在于此!
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
}
}
注意结构和特征是如何在生命周期中被参数化的,生命周期是相同的。
What would the non-trait versions of
save()
andrestore()
look like forSimpleKeeper<'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
}
}
And would they mean exactly the same thing as the the trait version?
是的!