Я читаю строку из файла, разбивая ее по строкам на вектор, а затем я хочу что-то сделать с выделенными линиями в отдельных потоках. Как это:Увеличьте время жизни переменной для потока
use std::fs::File;
use std::io::prelude::*;
use std::thread;
fn main() {
match File::open("data") {
Ok(mut result) => {
let mut s = String::new();
result.read_to_string(&mut s);
let k : Vec<_> = s.split("\n").collect();
for line in k {
thread::spawn(move || {
println!("nL: {:?}", line);
});
}
}
Err(err) => {
println!("Error {:?}",err);
}
}
}
Конечно, это выдает ошибку, потому что s
будет выходить за рамки, прежде чем запущены нити:
s` does not live long enough
main.rs:9 let k : Vec<_> = s.split("\n").collect();
^
Что я могу сделать сейчас? Я пробовал много вещей, таких как Box
или Arc
, но я не мог заставить его работать. Мне как-то нужно создать копию s
, которая также живет в потоках. Но как мне это сделать?