¿Cómo tomo prestado un RefCell <HashMap>, encuentro una clave y devuelvo una referencia al resultado? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Cómo devuelvo una referencia a algo dentro de un RefCell sin romper la encapsulación? 3 respuestastengo unRefCell<HashMap>
y querer tomar prestada la tabla, encontrar una clave y devolver una referencia al resultado:
use std::cell::RefCell;
use std::collections::HashMap;
struct Frame {
map: RefCell<HashMap<String, String>>,
}
impl Frame {
fn new() -> Frame {
Frame {
map: RefCell::new(HashMap::new()),
}
}
fn lookup<'a>(&'a self, k: &String) -> Option<&'a String> {
self.map.borrow().get(k)
}
}
fn main() {
let f = Frame::new();
println!("{}", f.lookup(&"hello".to_string()).expect("blargh!"));
}
Si elimino elRefCell
entonces todo funciona bien:
struct Frame {
map: HashMap<String, String>,
}
impl Frame {
fn lookup<'a>(&'a self, k: &String) -> Option<&'a String> {
self.map.get(k)
}
}
¿Cuál es la forma correcta de escribir la función de búsqueda sin copiar la cadena en la tabla hash?