2
我想創建一個函數,該函數獲取與哈希表中的鍵相關的值,如果此值不存在,則插入任意值(讓我們說0)。混合對HashMap的可變引用和不可變引用
use std::collections::HashMap;
fn get_or_insert(table: &mut HashMap<i32, i32>, key: i32) -> i32 {
match table.get(&key) {
None => table.insert(key, 0).unwrap(),
Some(v) => *v,
}
}
此代碼不編譯:
error[E0502]: cannot borrow `*table` as mutable because it is also borrowed as immutable
--> src/main.rs:5:17
|
4 | match table.get(&key) {
| ----- immutable borrow occurs here
5 | None => table.insert(key, 0).unwrap(),
| ^^^^^ mutable borrow occurs here
6 | Some(v) => *v,
7 | }
| - immutable borrow ends here
實際上,table
被性情不定地在該方法中insert
而它在該方法get
一成不變藉藉來的。
我看不出在這個函數中分隔可變和不可變部分的辦法。
謝謝,我不知道有'return'關鍵字。這很有用! – user19018