J'utilise lazy_static
pour conserver un HashMap
dans la mémoire. Avec deux méthodes, j'ajoute et j'obtiens des éléments, mais j'ai quelques problèmes avec les durées de vie.Problème de durée de vie avec une variable mutable lazy_static
Ceci est mon code:
#[macro_use]
extern crate lazy_static;
use std::sync::Mutex;
use std::collections::HashMap;
lazy_static! {
static ref HASHMAP: Mutex<HashMap<String, Foo>> = Mutex::new({
let mut m = HashMap::new();
m.insert("one".to_string(), Foo{param1:"foo1".to_string(), param2:"foo2".to_string()});
m.insert("two".to_string(), Foo{param1:"bar1".to_string(), param2:"bar2".to_string()});
m
});
}
pub struct Foo{
param1: String,
param2: String,
}
pub fn ins_val(name: String, f: Foo){
HASHMAP.lock().unwrap().insert(name, f);
}
pub fn get_val(k: &str) -> Option<&Foo>{
HASHMAP.lock().unwrap().get(k)
}
Et ceci est l'erreur:
HASHMAP.lock().unwrap().get(k)
^^^^^^^^^^^^^^^^^^^^^^^
reference must be valid for the anonymous lifetime #1 defined on the block
Une autre option consiste à changer l'interface pour accepter une fermeture qui obtient une référence dans la carte, qui peut choisir de renvoyer une copie de la référence ou simplement de l'inspecter. Plus de détails [dans cette réponse] (http://stackoverflow.com/a/40853817/1600898). – user4815162342
Notez que vous pouvez utiliser 'option.cloned()' comme raccourci pour 'option.map (Clone :: clone)'. – user4815162342
Merci - mis à jour pour utiliser cloné. –