[英]Mismatched types error while deserializing with pattern matching
我正在嘗試根據傳遞給 function 的值將 csv 值反序列化為不同類型的結構。
我不明白為什么會收到mismatched types
的錯誤。 當它位於不同的匹配項 arm 中時,為什么它會找到 struct CitiRec
?
pub fn get_uncat_rec(path: &PathBuf, bank_type: BankType) -> Vec<UnCatRecord> {
let mut reader = csv::Reader::from_path(path).unwrap();
let mut uncat_rec: Vec<UnCatRecord> = Vec::new();
for record in reader.deserialize() {
match bank_type {
BankType::Citi => {
let rec_result: Result<CitiRec, csv::Error> = record;
match rec_result {
Ok(rec_result) => {
uncat_rec.push(rec_result.to_uncat_rec());
}
Err(err) => {
println!("Error received deserializing Citi Record: {}", err);
}
}
}
BankType::Kasaka => {
let rec_result: Result<KasakaRec, csv::Error> = record; <-- **error here**
match rec_result {
Ok(rec_result) => {
uncat_rec.push(rec_result.to_uncat_rec());
}
Err(err) => {
println!("Error received deserializing Kasaka Record: {}", err);
}
}
}
_ => {}
}
這是收到的錯誤:
error[E0308]: mismatched types
--> src\normalizer.rs:26:57
|
26 | let rec_result: Result<KasakaRec, csv::Error> = record;
| ----------------------------- ^^^^^^ expected struct `KasakaRec`, found struct `CitiRec`
| |
| expected due to this
|
= note: expected enum `Result<KasakaRec, _>`
found enum `Result<CitiRec, _>`
類型不能是有條件的。 record
有一個,而且只有一個類型。
從第一個match
項 arm 開始,編譯器得出結論,您正在反序列化為CitiRec
s。 但是在第二個中,您似乎正在反序列化為KasakaRec
s,這是一個沖突。
解決這個問題的一種方法是為每個 arm 設置一個單獨的循環,這樣我們就可以反序列化為不同的類型:
pub fn get_uncat_rec(path: &PathBuf, bank_type: BankType) -> Vec<UnCatRecord> {
let mut reader = csv::Reader::from_path(path).unwrap();
let mut uncat_rec: Vec<UnCatRecord> = Vec::new();
match bank_type {
BankType::Citi => {
for record in reader.deserialize() {
let rec_result: Result<CitiRec, csv::Error> = record;
match rec_result {
Ok(rec_result) => {
uncat_rec.push(rec_result.to_uncat_rec());
}
Err(err) => {
println!("Error received deserializing Citi Record: {}", err);
}
}
}
}
BankType::Kasaka => {
for record in reader.deserialize() {
let rec_result: Result<KasakaRec, csv::Error> = record;
match rec_result {
Ok(rec_result) => {
uncat_rec.push(rec_result.to_uncat_rec());
}
Err(err) => {
println!("Error received deserializing Kasaka Record: {}", err);
}
}
}
}
_ => {}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.