我正在尝试解析一个文件,并从函数返回Vec<Vec<&str>>
。但是在文件读取循环中将内容push到向量时,出现了借用值错误。
use std::io::{self, BufReader, prelude::*};
use std::fs::File;
fn read() -> Vec<Vec<&'static str>> {
let file = File::open("~/test").expect("failed to read file");
let reader = BufReader::new(file);
let mut main_vector: Vec<Vec<&str>> = Vec::new();
for line in reader.lines() {
match line {
Ok(v) => {
let mut sub_vector: Vec<&str> = Vec::new();
for element in v.split_whitespace().collect::<Vec<&str>>() {
sub_vector.push(element);
}
main_vector.push(sub_vector);
},
Err(e) => panic!("failed to parse: {:?}", e),
}
}
//return main_vector;
}
以下是编译器错误:
error[E0597]: `v` does not live long enough
--> src/main.rs:67:32
|
67 | for element in v.split_whitespace().collect::<Vec<&str>>() {
| ^ borrowed value does not live long enough
...
70 | main_vector.push(sub_vector);
| -------------- borrow later used here
71 | },
| - `v` dropped here while still borrowed
我认为这与引用和借用有关,但我仍然很难理解。
Vec<Vec<String>>
替代Vec<Vec<&str>>
即可解决。谢谢! - orhunString
工作方式(在&str
无法工作时)的信息。这也解决了我的问题。 - Jake Ireland