如何说服借阅检查器允许我缓存值?

化解

借阅检查员击败了我:

use std::collections::HashMap;

struct Cache {
    cache: Vec<HashMap<String, String>>,
}

impl Cache {
    fn get(&mut self, index: usize, key: String) -> String {
        let mut cache = &mut self.cache[index];
        match cache.get(&key) {
            Some(r) => {
                return r.clone();
            }
            None => {
                let r = "foo".to_string(); // something smart here
                cache.insert(key, r.clone());
                return r;
            }
        }
    }
}

我得到的是:

error[E0502]: cannot borrow `*cache` as mutable because it is also borrowed as immutable
  --> src/main.rs:16:17
   |
10 |         match cache.get(&key) {
   |               ----- immutable borrow occurs here
...
16 |                 cache.insert(key, r.clone());
   |                 ^^^^^ mutable borrow occurs here
...
19 |         }
   |         - immutable borrow ends here

如何重写我的代码以便编译?

烧寿司5

另一种方法是使用entry接口。这种方法的唯一缺点是(当前)不使用BorrowFromget方法使用的基础结构,这使其灵活性降低了。在您的情况下,这不是问题,因为get它拥有一个拥有的密钥。这样做的好处entry是它只执行一次哈希查找,而使用则get强制您执行两次查找。

use std::collections::HashMap;

struct Cache {
    cache: Vec<HashMap<String, String>>,
}

impl Cache {
    fn get(&mut self, index: usize, key: String) -> String {
        self.cache[index]
            .entry(key)
            .or_insert_with(|| "foo".to_string())
            .clone()
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何说服借阅检查器允许我缓存值?

来自分类Dev

如何升级我的Slicable特质以满足反复调用中的借阅检查器

来自分类Dev

如何升级我的Slicable特性以满足反复调用中的借阅检查器

来自分类Dev

困惑的借阅检查器消息

来自分类Dev

父母子女关系借阅检查器

来自分类Dev

了解两次在迭代器上调用方法时如何满足借阅检查器?

来自分类Dev

如何在不烦恼借阅检查器的情况下为双向地图建模?

来自分类Dev

难以在JavaScript中实现简化的借阅检查器

来自分类Dev

为什么Rust借阅检查器拒绝此功能?

来自分类Dev

使用特征作为类型参数时借阅检查器失败

来自分类Dev

Rust借阅检查器是否在本地或全局分析程序?

来自分类Dev

借阅检查器“无法移出借用内容”

来自分类Dev

我如何说服Spring 4.2将OPTIONS请求传递给控制器

来自分类Dev

如何说服我已登录的Django?

来自分类Dev

如何清理(重置)我的装饰器的缓存?

来自分类Dev

仅允许枚举的子集作为返回值-或如何使编译器警告我?在C ++中

来自分类Dev

如何说服WebStorm我的用户脚本加载了jQuery?

来自分类Dev

如何说服我正在使用数值向量的fct_infreq?

来自分类Dev

如何确定地说服苹果我不想安装iCloud?

来自分类Dev

如何检查我的应用是否允许显示通知

来自分类Dev

借阅检查器:不能借为不可变的,因为它也借为可变的

来自分类Dev

PC不允许我跳过不需要引导的驱动器上的磁盘检查;如何在运行时检查磁盘?

来自分类Dev

比较器不允许我比较T值

来自分类Dev

我们如何在 c 中检查内联汇编中的寄存器值?

来自分类Dev

我如何允许空值被我的WebAPI模型接受?

来自分类Dev

如何从服务器端缓存我的网站

来自分类Dev

如何从服务器端缓存我的网站

来自分类Dev

如何找到我的ISP的缓存服务器?

来自分类Dev

我如何只允许控制器访问表单提交?

Related 相关文章

  1. 1

    如何说服借阅检查器允许我缓存值?

  2. 2

    如何升级我的Slicable特质以满足反复调用中的借阅检查器

  3. 3

    如何升级我的Slicable特性以满足反复调用中的借阅检查器

  4. 4

    困惑的借阅检查器消息

  5. 5

    父母子女关系借阅检查器

  6. 6

    了解两次在迭代器上调用方法时如何满足借阅检查器?

  7. 7

    如何在不烦恼借阅检查器的情况下为双向地图建模?

  8. 8

    难以在JavaScript中实现简化的借阅检查器

  9. 9

    为什么Rust借阅检查器拒绝此功能?

  10. 10

    使用特征作为类型参数时借阅检查器失败

  11. 11

    Rust借阅检查器是否在本地或全局分析程序?

  12. 12

    借阅检查器“无法移出借用内容”

  13. 13

    我如何说服Spring 4.2将OPTIONS请求传递给控制器

  14. 14

    如何说服我已登录的Django?

  15. 15

    如何清理(重置)我的装饰器的缓存?

  16. 16

    仅允许枚举的子集作为返回值-或如何使编译器警告我?在C ++中

  17. 17

    如何说服WebStorm我的用户脚本加载了jQuery?

  18. 18

    如何说服我正在使用数值向量的fct_infreq?

  19. 19

    如何确定地说服苹果我不想安装iCloud?

  20. 20

    如何检查我的应用是否允许显示通知

  21. 21

    借阅检查器:不能借为不可变的,因为它也借为可变的

  22. 22

    PC不允许我跳过不需要引导的驱动器上的磁盘检查;如何在运行时检查磁盘?

  23. 23

    比较器不允许我比较T值

  24. 24

    我们如何在 c 中检查内联汇编中的寄存器值?

  25. 25

    我如何允许空值被我的WebAPI模型接受?

  26. 26

    如何从服务器端缓存我的网站

  27. 27

    如何从服务器端缓存我的网站

  28. 28

    如何找到我的ISP的缓存服务器?

  29. 29

    我如何只允许控制器访问表单提交?

热门标签

归档