【发布时间】:2019-02-08 11:47:02
【问题描述】:
我有一个结构向量,我想用另一个结构中的值更新一个结构。对于我的用例,我更喜欢循环执行。我正在点击借用检查器,但似乎必须有一个简单的解决方案来解决这类问题。
#[derive(Debug)]
struct Column {
header: String,
amount: i32,
}
fn main() {
let mut spreadsheet: Vec<Column> = Vec::new();
spreadsheet.push(Column {
header: "Car".to_string(),
amount: 30300,
});
spreadsheet.push(Column {
header: "House".to_string(),
amount: 210800,
});
spreadsheet.push(Column {
header: "Total".to_string(),
amount: 0,
});
for column in &mut spreadsheet {
//mutable borrow here
if column.header == "Total" {
column.amount = spreadsheet[0].amount //immutable borrow here
+ spreadsheet[1].amount;
} else {
column.amount -= 300;
}
}
for column in spreadsheet {
println!("{:?}", column);
}
}
【问题讨论】:
-
嗯,不是你所期望的,但这会起作用play.rust-lang.org/…
-
谢谢你 - 很好的建议 - 我很可能需要使用两个循环/迭代 - 我希望我可以一次完成 -
-
如果您推迟推送
Total直到您处理完其他项目之后,您可以轻松完成一次迭代;或者,稍微考虑一下,通过保存它的索引/引用并在循环之后进行突变。
标签: rust borrow-checker