我不确定如何正确地 Headers 这篇文章 . 我对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
中的实际引用 . 这有关系吗?
我的一部分感觉我需要指定从 get_bar
返回的 &Bar
的生命周期,但我不知道如何将其与 Foo
结构的生命周期联系起来?
我在这里错过了什么?
1 回答
您必须指定要返回的引用与生命周期
'a
相关联,而不是编译器将为您推断的self的生命周期:这相当于原始代码:
在这种情况下,
Foo
的生命周期根本不重要 .