编译以下代码时:
fn main() {
let mut fields = Vec::new();
let pusher = &mut |a: &str| {
fields.push(a);
};
}
编译器给我以下错误:
error: borrowed data cannot be stored outside of its closure
--> src/main.rs:4:21
|
3 | let pusher = &mut |a: &str| {
| ------ --------- ...because it cannot outlive this closure
| |
| borrowed data cannot be stored into here...
4 | fields.push(a);
| ^ cannot be stored outside of its closure
此错误是什么意思,我该如何修复我的代码?
答案 0 :(得分:5)
它的确切含义是:借用的数据仅在关闭期间有效。尝试将其存储在闭包之外会使代码暴露于内存安全中。
之所以出现这种情况,是因为推断出的闭包参数的生存期与Vec
中存储的生存期无关。
通常,这不是您遇到的问题,因为某事引起了更多类型推断的发生。在这种情况下,您可以向fields
添加类型并将其从闭包中删除:
let mut fields: Vec<&str> = Vec::new();
let pusher = |a| fields.push(a);