我正在尝试解析在每个值之间具有管道分隔符的文件,并且每行都是新记录。我正在迭代每一行:
use std::fs::File;
use std::io::BufReader;
use std::io::prelude::*;
fn main() {
let source_file = File::open("input.txt").unwrap();
let reader = BufReader::new(source_file);
for line in reader.lines() {
if let Some(channel_line) = line {
println!("yay");
}
}
}
然而,我收到错误:
error[E0308]: mismatched types
--> src/main.rs:9:20
|
9 | if let Some(channel_line) = line {
| ^^^^^^^^^^^^^^^^^^ expected enum `std::result::Result`, found enum `std::option::Option`
|
= note: expected type `std::result::Result<std::string::String, std::io::Error>`
= note: found type `std::option::Option<_>`
这个错误令我感到困惑,因为找到的类型就是我所期望的Option<Result<String, Error>>
所指出的Option
,所以在假设我结果之前打开{{1}}是有意义的我不缺少什么。
答案 0 :(得分:3)
您链接到next
的文档,但您没有使用next
(不是直接),您正在使用for循环。在for循环中,迭代变量的类型(即代码中line
的类型)是迭代器的Item
类型,在您的情况下是Result<String>
。
next
的类型为Option<Item>
,因为您可能会在已经到达结尾的迭代器上调用next
。 for循环的主体在迭代结束后不会执行,因此迭代变量中没有任何一个选项。