从RefCell内的HashMap返回值

时间:2018-09-01 02:17:43

标签: rust

我有一个结构,其中包含HashMap内的RefCell。我想在结构上实现一个方法,该方法实际上只是HashMap的{​​{1}}方法之上的一层。这是模型的简化版本:

get

无法编译:

use std::cell::RefCell;
use std::cell::Ref;
use std::ops::Deref;
use std::collections::HashMap;

#[derive(Debug)]
struct Bar {
    content: String
}

struct Foo {
    map: RefCell<HashMap<i32, Bar>>,
}

impl Foo {
    pub fn get_val(&self, key: i32) -> Option<&Bar> {
        self.map.borrow().get(&key)
    }
}

我尝试做类似this similar question的回答:

error[E0597]: borrowed value does not live long enough
  --> src/main.rs:21:9
   |
21 |         self.map.borrow().get(&key)
   |         ^^^^^^^^^^^^^^^^^ temporary value does not live long enough
22 |     }
   |     - temporary value only lives until here
   |

但是它也不起作用:

pub fn get_val(&self, key: i32) -> impl Deref<Target = Option<&Bar>> + '_ {
    Ref::map(self.map.borrow(), |mi| &mi.get(&key))
}

是否可以做我想做的事情?还是应该重新考虑对象模型?

在2015年提出了一个identical question,答案是将error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements --> src/main.rs:18:46 | 18 | Ref::map(self.map.borrow(), |mi| &mi.get(&key)) | ^^^ | 放在Rc内。但是,那是在引入HashMap之前,所以我希望Rust 2018中有更好的解决方案。

Here是游乐场链接。

0 个答案:

没有答案