Как повторно использовать `Результат`? - PullRequest
0 голосов
/ 20 июня 2020

Следующее не компилируется. Каков канонический способ сделать это?

let file = File::open(&args.path)?;
let reader = BufReader::new(file);

for line in reader.lines() {
    if line?.contains(&args.pattern) {
        println!("{}", line?);
    }
}

Вот сообщение об ошибке, для полноты:

34 |      println!("{}", line?);
   |                     ^^^^ value used here after move

1 Ответ

5 голосов
/ 20 июня 2020

В вашем примере line - это Result, который перемещается, когда вы используете ? (но действительно ли нам нужен Result после того, как вы развернули его содержимое ???). Чтобы облегчить вашу проблему, давайте затенем значение Result в локальной переменной с тем же именем.

for line in reader.lines() {
    let line = line?;
    if line.contains(&args.pattern) {
        println!("{}", line);
    }
}
...