![](/img/trans.png)
[英]How can I return a reference to a local variable specifying that its lifetime is the same as self?
[英]Return reference with lifetime of self
我想写一些如下代码:
struct Foo {
foo: usize
}
impl Foo {
pub fn get_foo<'a>(&'a self) -> &'self usize {
&self.foo
}
}
但这不起作用, invalid lifetime name: 'self is no longer a special lifetime
。
如何返回与对象本身一样长的引用?
在您的示例中, self
的生命周期为'a
因此返回引用的生命周期应为'a
:
pub fn get_foo<'a>(&'a self) -> &'a usize {
&self.foo
}
但是,编译器能够在这样的简单情况下推断(生命周期缩减)正确的生命周期,因此您可以避免指定生命周期,这样:
pub fn get_foo(&self) -> &usize {
&self.foo
}
您不希望引用与对象完全一样长。 你只是想要对象(相当比对象的整个生命周期较短的可能)上借位,并希望最终的参考,以有借的寿命。 这是这样写的:
pub fn get_foo<'a>(&'a self) -> &'a usize {
&self.foo
}
此外,终身省略使签名更漂亮:
pub fn get_foo(&self) -> &usize {
&self.foo
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.