Tôi cho rằng câu hỏi này là về tuổi thọ nói chung, nhưng tôi gặp khó khăn với đóng cửa đặc biệt vì bạn không thể viết ra loại của họ.Làm thế nào để khai báo một đóng cửa tồn tại lâu hơn khối bao quanh của nó
Ví dụ này hơi bị lôi cuốn - Tôi chỉ mới bắt đầu học Rust, và đây là thứ tôi đã bị treo lên.
Chương trình này sẽ không biên dịch:
fn main() {
let mut list: Vec<&Fn() -> i32> = Vec::new();
{
list.push(&|| 1);
}
}
Bởi vì:
src/main.rs:5:25: 5:24 error: borrowed value does not live long enough
src/main.rs:5 list.push(&|| 1);
^~~~
src/main.rs:2:50: 7:2 note: reference must be valid for the block suffix following statement 0 at 2:49...
src/main.rs:2 let mut list: Vec<&Fn() -> i32> = Vec::new();
src/main.rs:3
src/main.rs:4 {
src/main.rs:5 list.push(&move || 1);
src/main.rs:6 }
src/main.rs:7 }
src/main.rs:5:9: 5:26 note: ...but borrowed value is only valid for the statement at 5:8
src/main.rs:5 list.push(&|| 1);
^~~~~~~~~~~~~~~~~
src/main.rs:5:9: 5:26 help: consider using a `let` binding to increase its lifetime
src/main.rs:5 list.push(&|| 1);
^~~~~~~~~~~~~~~~~
Những gì tôi thu thập từ các lỗi này là tuổi thọ của việc đóng cửa được giới hạn trong tuyên bố bên trong khối, nhưng nó cần phải sống cho toàn bộ cơ thể của main
.
Tôi biết (hoặc, tôi nghĩ) rằng việc chuyển phần đóng thành push
làm tham chiếu có nghĩa là push
chỉ mượn khoản đóng và quyền sở hữu đó sẽ được trả về khối. Mã này sẽ hoạt động nếu tôi chỉ có thể đóng cửa cho push
(tức là nếu push
sở hữu đóng cửa), nhưng do đóng cửa không có kích thước, tôi phải chuyển nó làm tài liệu tham khảo.
Đúng không? Làm thế nào tôi có thể làm cho mã này hoạt động?