在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
爲什麼我的解決方法無效,以及解決此問題的正確方法是什麼?