返回自我生命周期的参考

yon*_*ong 4 lifetime rust

我想写一些如下代码:

struct Foo {
    foo: usize
}

impl Foo {
    pub fn get_foo<'a>(&'a self) -> &'self usize {
        &self.foo
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,失败了invalid lifetime name: 'self is no longer a special lifetime.

如何返回与对象本身一样长的引用?

eul*_*isk 10

在您的示例中,生命周期self'a这样的,返回引用的生命周期应为'a:

pub fn get_foo<'a>(&'a self) -> &'a usize {
    &self.foo
}
Run Code Online (Sandbox Code Playgroud)

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

pub fn get_foo(&self) -> &usize {
    &self.foo
}
Run Code Online (Sandbox Code Playgroud)

在这里查看终身省略规则


小智 8

您不希望引用与对象完全一样长.你只是想要一个对象(相当比对象的整个生命周期较短的可能)的借位,并且希望得到的参考有借的寿命.这是这样写的:

pub fn get_foo<'a>(&'a self) -> &'a usize {
    &self.foo
}
Run Code Online (Sandbox Code Playgroud)

此外,终身省略使签名更漂亮:

pub fn get_foo(&self) -> &usize {
    &self.foo
}
Run Code Online (Sandbox Code Playgroud)