为什么我在使用 for 中的选项"borrowed value here after move"出错?



我正在尝试获取和替换for中选项变量的值,如果负责替换选项变量值的匹配项在同一迭代中,我不明白为什么会出现此错误

let mut key = None;
let mut value = None;
for element in parser {
match element.unwrap() {
xml::reader::XmlEvent::StartElement { name, .. } => {
key.replace(name.local_name); //borrow of moved value: `key`  value borrowed here after move
}
xml::reader::XmlEvent::Characters(string) => {
value.replace(string); //borrow of moved value: `value`  value borrowed here after move
}
_ => {}
}
match (key, value) {
(None, None) => todo!(),
(None, Some(_)) => todo!(),
(Some(_), None) => todo!(),
(Some(_), Some(_)) => {
key.take();
value.take();
}
}
}

为了理解@PitaJ的解决方案是正确的,我们必须实现match语句的语义。Match语句将使用(移动(您给它的表达式。通过给值提供引用,我们强制match只检查值而不移动它。

相关内容

最新更新