3
我試圖解析都有每個值之間的豎線分隔符文件,每一行是一個新的記錄。我遍歷每一行是這樣的:不匹配的類型,如果讓語句:發現選項預期的結果
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>>
如docs所示,所以假設我沒有遺漏某些東西,在結果之前打開Option
是合理的。
感謝,由於某種原因,我是不正確的信念,即for循環直接利用接下來的作用下。 – rpiper
@rpiper * for循環直接利用'next'函數* - 是的,它在內部使用'next'。它處理'Some'或'None'的情況,當'Some'執行正文並且退出'None'時的循環。 – Shepmaster
@rpiper它是,但它更多地沿着「如果下一個返回Some(x)將'x'賦值給循環變量,否則結束循環」。 – sepp2k