[英]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.