无法在迭代器的for循环中移出借用的内容

时间:2018-10-17 03:03:35

标签: rust

我正在尝试通过实现Iterator特征来实现“读取行”功能。

在这里,我在结构内部拥有Bytes<BufReader<File>>。对于next函数,我希望遍历迭代器以找到b'\n'

use std::io::BufReader;

struct MyStringLineBufReader {
    bytes_iter: std::io::Bytes<BufReader<std::fs::File>>,
}

impl Iterator for MyStringLineBufReader {
    type Item = (String);

    fn next(&mut self) -> Option<<Self as Iterator>::Item> {
        let mut bytes: Vec<u8> = Vec::new();
        for b in self.bytes_iter {
            let b = b.unwrap();
            if b == b'\n' {
                break;
            } else {
                bytes.push(b)
            }
        }
        return Some(String::from_utf8(bytes).unwrap());
    }
}

代码尚未完成,但是我认为它应该编译。我收到以下消息:

error[E0507]: cannot move out of borrowed content
  --> src/lib.rs:12:18
   |
12 |         for b in self.bytes_iter {
   |                  ^^^^ cannot move out of borrowed content

我不知道该如何解决。

0 个答案:

没有答案