В this github discussion вы найдете код, который привлекает ярость заема проверки:Как избежать множественных изменчивых значений вектора при вставке значения, если вектор пуст?
fn main() {
let mut vec = vec!();
match vec.first() {
None => vec.push(5),
Some(v) => unreachable!(),
}
}
Я понимаю, почему с мутацией в то время как неизменные заимствует выдающиеся проблематично. Я предположил, что решение было явно только один заем (изменяемые один), но она по-прежнему в результате у меня есть две заимствует, неизменный заем, а затем изменяемый заем:
fn main() {
let mut vec: Vec<i32> = vec!();
let r_vec: &mut Vec<i32> = &mut vec;
match r_vec.first() {
None => r_vec.push(5),
Some(v) => unreachable!(),
}
}
компилятор все еще не устраивает:
error[E0502]: cannot borrow `*r_vec` as mutable because it is also borrowed as immutable
--> testrust.rs:7:17
|
6 | match r_vec.first() {
| ----- immutable borrow occurs here
7 | None => r_vec.push(5),
| ^^^^^ mutable borrow occurs here
8 | Some(v) => unreachable!(),
9 | }
| - immutable borrow ends here
Почему мое обходное решение не работает, и каков правильный способ обойти эту проблему?