我有结构的载体,我想与另一个值,以更新一个结构。对于我的使用情况下,我宁愿做一个循环。我打了借位检查,但好像必须有一个简单的解决此类问题。
#[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);
}
}
您正在尝试设置电子表格矢量元素,而它内部的迭代。因为你总是想用spreadsheet[0].amount
和spreadsheet[1].amount
可以复制这个值到另一个变量,而是与他们的工作使用这些电子表格内的。
这里是工作的代码:
#[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,
});
let car_amount = spreadsheet[0].amount;
let header_amount = spreadsheet[1].amount;
spreadsheet.iter_mut().for_each(|column| {
if column.header == "Total" {
column.amount = car_amount + header_amount;
} else {
column.amount -= 300;
}
});
for column in spreadsheet {
println!("{:?}", column);
}
}
既然你想在做这些操作的循环,而不是迭代器可以改变spreadsheet.iter_mut()...
代码块以下几点:
for column in &mut spreadsheet {
if column.header == "Total" {
column.amount = car_amount + header_amount;
} else {
column.amount -= 300;
}
}