使用.lines()时“借来的价值不够长”

时间:2017-12-14 01:16:07

标签: rust lifetime

我正在尝试通过缓冲区读取文本,然后计算每个单词出现在文本中的次数:

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必须活到主要结束为止以及为什么它在被借用时被丢弃。为什么我有这个错误?

0 个答案:

没有答案