【发布时间】:2015-05-01 18:38:45
【问题描述】:
我想创建一个函数,它获取与哈希表中的键关联的值,如果这样的值不存在,则插入任意值(假设为 0)。
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 中是不可变借用的。
我看不出有办法在这个函数中分离可变部分和不可变部分。
【问题讨论】:
标签: rust