2
我正在從文件中讀取一個字符串,將它按行分成一個向量,然後我想在分開的線程中對提取的行進行一些操作。就像這樣:延長線程變量的生存期
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
的副本,它也存在於線程中。但我該怎麼做?