![](/img/trans.png)
[英]"Lifetime in struct : "this value requires that `'1` must outlive `'static`
[英]Struct must outlive member reference
我不確定如何正確地為此帖子加上標題。 我對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
結構的生存期聯系起來?
我在這里想念什么?
您必須指定要返回的引用與生命周期'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 }
}
我的一部分感到應該指定從get_bar返回的&Bar的生存期,但是我不知道如何將其與Foo結構的生存期聯系起來?
在這種情況下, Foo
的壽命根本不重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.