如何改变哈希映射?

时间:2017-11-21 19:47:09

标签: rust

我正在解决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进行了可变借用,但它没有帮助:编译器报告相同的错误。

如何更改我的代码以便能够将记忆值插入哈希映射?

对于模糊的标题感到抱歉,没有找到更好的描述。

0 个答案:

没有答案