我正在解决Rust Book中的任务:
struct Cacher<T>
where
T: Fn(i32) -> i32,
{
calculation: T,
hm: HashMap<i32, i32>,
}
impl<T> Cacher<T>
where
T: Fn(i32) -> i32,
{
// ...
fn value(&mut self, arg: i32) -> i32 {
let v = self.hm.get(&arg); // borrowing returned Option<&V>
match v {
// matching owned value
Some(v) => *v, //return Copy'ied i32
None => {
let v2 = (self.calculation)(arg); // get result of closure
self.hm.insert(arg, v2); // memoize gotten value
v2 // return value
}
}
}
// ...
}
但是,编译器提供以下内容:
let v = self.hm.get(&arg);
--- immutable borrow occures here
好的,我明白了,但下一条消息:
self.hm.insert(arg, v2);
^^^^^^^ mutable borrow occures here
如果我不改变v
中的借用(self.hm.insert(arg, v2);
)值,会怎么样?
我通过将let v
更改为let mut v
进行了可变借用,但它没有帮助:编译器报告相同的错误。
如何更改我的代码以便能够将记忆值插入哈希映射?
对于模糊的标题感到抱歉,没有找到更好的描述。