我正在尝试通过缓冲区读取文本,然后计算每个单词出现在文本中的次数:
let mut word_map: HashMap<&str, isize> = HashMap::new();
let reader = BufReader::new(file);
for line in reader.lines() {
for mut curr in line.unwrap().split_whitespace() {
match word_map.entry(curr) {
Entry::Occupied(entry) => {
*entry.into_mut() += 1;
}
Entry::Vacant(entry) => {
entry.insert(1);
}
}
}
}
我正在尝试使用HashMap
将单词作为键,将文本中的频率作为值。如果找到一个新单词,则其值为1,否则其值会递增。
我经常遇到这个错误,无法找到出路。我试图在内部循环之前使用let
,但我仍然得到相同的错误,说明临时值
error[E0597]: `line` does not live long enough
--> src\main.rs:32:2
|
26 | for mut curr in line.as_ref().unwrap().split_whitespace(){
| ---- borrow occurs here
...
32 | }
| ^ `line` dropped here while still borrowed
33 |
34 | }
| - borrowed value needs to live until here
我很难找到为什么line
必须活到主要结束为止以及为什么它在被借用时被丢弃。为什么我有这个错误?