Tôi muốn viết cấu trúc này:Làm thế nào để viết đúng cấu trúc tuổi thọ trong Rust?
struct A {
b: B,
c: C,
}
struct B {
c: &C,
}
struct C;
Các B.c
nên được vay mượn từ A.c
.
A ->
b: B ->
c: &C -- borrow from --+
|
c: C <------------------+
Đây là những gì tôi đã cố gắng:
struct C;
struct B<'b> {
c: &'b C,
}
struct A<'a> {
b: B<'a>,
c: C
}
impl<'a> A<'a> {
fn new<'a>() -> A<'a> {
let c = C;
A {c: c, b: B{c: &c}}
}
}
Nhưng nó không thành công:
test.rs:17:21: 17:22 error: `c` does not live long enough
test.rs:17 A {b: B{c: &c}, c: &c}
^
test.rs:15:27: 18:6 note: reference must be valid for the lifetime 'a as defined on the block at 15:26...
test.rs:15 fn new<'a>() -> A<'a> {
test.rs:16 let c = C;
test.rs:17 A {b: B{c: &c}, c: &c}
test.rs:18 }
test.rs:15:27: 18:6 note: ...but borrowed value is only valid for the block at 15:26
test.rs:15 fn new<'a>() -> A<'a> {
test.rs:16 let c = C;
test.rs:17 A {b: B{c: &c}, c: &c}
test.rs:18 }
test.rs:17:29: 17:30 error: `c` does not live long enough
test.rs:17 A {b: B{c: &c}, c: &c}
^
test.rs:15:27: 18:6 note: reference must be valid for the lifetime 'a as defined on the block at 15:26...
test.rs:15 fn new<'a>() -> A<'a> {
test.rs:16 let c = C;
test.rs:17 A {b: B{c: &c}, c: &c}
test.rs:18 }
test.rs:15:27: 18:6 note: ...but borrowed value is only valid for the block at 15:26
test.rs:15 fn new<'a>() -> A<'a> {
test.rs:16 let c = C;
test.rs:17 A {b: B{c: &c}, c: &c}
test.rs:18 }
error: aborting due to 2 previous errors
Tôi đã đọc các tài liệu hướng dẫn Rust trên quyền sở hữu, nhưng tôi vẫn không biết làm thế nào để sửa nó.
Nếu có bất kỳ bài viết hữu ích nào, hãy cho tôi biết trong phần nhận xét.
"đó là lỗi" không phải là một lời giải thích đầy đủ về vấn đề này. Nếu trình biên dịch đưa ra một lỗi, vui lòng gửi nó và cho chúng tôi biết dòng đó là gì. –
@DavidGrayson cảm ơn, tôi đã đăng. –
@geotheory Xin lỗi, tiếng Anh của tôi rất tệ, bây giờ tôi đã thay đổi tiêu đề. –