这里是生锈的新手。谁能帮助我了解为什么Rust不喜欢此代码以及如何对其进行修复?
struct Foo {
num: u32
}
struct Bar<'a> {
foo: Foo,
num_ref: &'a u32,
}
fn foo<'a>() -> Bar<'a> {
let f = Foo { num: 2 };
let n: &'a u32 = &f.num;
return Bar { foo: f, num_ref: n };
}
fn main() { }
我基本上想要一个返回Bar
的函数,该函数拥有Foo
和对num
(由Foo
拥有)的引用。
错误:
error[E0597]: `f.num` does not live long enough
--> src/main.rs:12:23
|
12 | let n: &'a u32 = &f.num;
| ^^^^^ borrowed value does not live long enough
13 | return Bar { foo: f, num_ref: n };
14 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the lifetime 'a as defined on the function body at 10:8...
--> src/main.rs:10:8
|
10 | fn foo<'a>() -> Bar<'a> {
| ^^
谢谢!
答案 0 :(得分:2)
编译器说您正在函数范围内借用f.num
,一旦完成此范围,对f.num
的引用就不再有效。
我不确定this example of code是否能为您提供帮助。我不知道在您的案例中“对num的引用”是否重要,但是似乎没有必要,也许您看不到如何实现这一点。
我建议您阅读并花时间了解ownership system在Rust中的工作方式。刚开始时可能会有些乏味,但是您将通过实践掌握这一概念。