结构必须比成员参考更长久

时间:2015-10-10 21:46:12

标签: rust

我不确定如何正确标题这篇文章。我对Rust很新,并尝试按照这个简单的结构编译程序,但它似乎不正确,我不确定为什么。

struct Bar;

impl Bar {
    fn do_thing(&self) { println!("Ha, do nothing!") }
}

struct Foo<'a> {
    bar: &'a Bar
}

impl<'a> Foo<'a> {
    fn new(b: &Bar) -> Foo { Foo { bar: b } }
    fn get_bar(&self) -> &Bar { self.bar }
}

fn main() {
    let b = Bar;
    let b_ref = {
        let f = Foo::new(&b);
        f.get_bar()
    };
    b_ref.do_thing();
}

此处的编译器错误声称f的活动时间不够长。 f生活多久并不重要 - b_ref只要b有效,并且我认为引用是Copy,这样我们就可以了我不必担心f中的实际参考。这有关系吗?

我的一部分感觉我需要指定从&Bar返回的get_bar的生命周期,但我不知道如何将其与{{1}的生命周期联系起来结构?

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

您必须指定要返回的引用与生命周期'a相关联,而不是编译器将为您推断的self的生命周期:

impl<'a> Foo<'a> {
    fn new(b: &Bar) -> Foo { Foo { bar: b } }
    fn get_bar(&self) -> &'a Bar { self.bar }
}

这相当于原始代码:

impl<'a> Foo<'a> {
    fn new(b: &Bar) -> Foo { Foo { bar: b } }
    fn get_bar<'b>(&'b self) -> &'b Bar { self.bar }
}
  

部分我觉得我应该指定&amp; Bar的生命周期   从get_bar返回,但我不知道如何将其绑定到   Foo结构的生命周期?

在这种情况下,Foo的生命周期根本不重要。