繁体   English   中英

返回自我生命周期的参考

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM