gpt4 book ai didi

concurrency - 为什么 'data' 仍然在我的函数末尾借用?

转载 作者:行者123 更新时间:2023-11-29 08:18:03 35 4
gpt4 key购买 nike

<分区>

rust-by-example 上实现 map-reduce 示例后,我试图做同样的事情,但数据存储在另一个文件中。编译器现在告诉我,我的 data 变量是借用了 'static 生命周期的,而且生命周期不够长。我不确定谁在借用我的“数据”,也不确定如何响应编译器的帮助。

我已经尝试添加所有类型注释以查看我是否在某处假设了错误的类型,但这并没有帮助。如果 data&'static str 而不是 String,则相同的代码有效。

use std::{fs, thread};

fn main() {
let data = fs::read_to_string("data.txt").unwrap();
let chunked_data = data.split_whitespace();

let mut children = vec![];
for chunk in chunked_data {
children.push(thread::spawn(move || -> u32 {
chunk.chars().map(|c| c.to_digit(10).unwrap()).sum()
}));
}

let mut sums = vec![];
for child in children {
let sum = child.join().unwrap();
sums.push(sum);
}

let res = sums.iter().sum::<u32>();
println!("{}", res);
}
error[E0597]: `data` does not live long enough
--> src/main.rs:5:24
|
5 | let chunked_data = data.split_whitespace();
| ^^^^-------------------
| |
| borrowed value does not live long enough
| argument requires that `data` is borrowed for `'static`
...
22 | }
| - `data` dropped here while still borrowed

我确定这个问题很容易解决,但我似乎无法找出谁在借用我的数据

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com