Return 自我生命周期的参考

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

我怎样才能 return 一个与对象本身一样长的引用?

您不希望引用与对象一样长。您只想 a 借用对象(很可能比对象的整个生命周期短),并且您希望生成的引用具有该借用的生命周期。是这样写的:

pub fn get_foo<'a>(&'a self) -> &'a usize {
    &self.foo
}

此外,生命周期省略使签名更漂亮:

pub fn get_foo(&self) -> &usize {
    &self.foo
}

在你的例子中 self 的生命周期是 'a 所以返回的引用的生命周期应该是 'a:

pub fn get_foo<'a>(&'a self) -> &'a usize {
    &self.foo
}

但是编译器能够在像这样的简单情况下推断出(生命周期省略)正确的生命周期,因此您可以完全避免指定生命周期,这样:

pub fn get_foo(&self) -> &usize {
    &self.foo
}

Look here for lifetime elision rules