不可变
use std::collections::HashMap;
use lazy_static::lazy_static;
lazy_static! {
static ref MAP: HashMap = {
let mut map = HashMap::new();
map.insert(1, "a");
map.insert(2, "b");
map.insert(3, "c");
map
};
}
fn main() {
println!("{}", MAP.get(&1).unwrap());
println!("{}", MAP.get(&2).unwrap());
println!("{}", MAP.get(&3).unwrap());
// cannot borrow as mutable
// MAP.insert(4, "d");
}
可变
use std::collections::HashMap;
use std::sync::Mutex;
use lazy_static::lazy_static;
lazy_static! {
static ref MAP: Mutex> = {
let mut map = HashMap::new();
map.insert(1, "a");
map.insert(2, "b");
map.insert(3, "c");
Mutex::new(map)
};
}
fn main() {
println!("{}", MAP.lock().unwrap().get(&1).unwrap());
println!("{}", MAP.lock().unwrap().get(&2).unwrap());
println!("{}", MAP.lock().unwrap().get(&3).unwrap());
MAP.lock().unwrap().insert(4, "d");
println!("{}", MAP.lock().unwrap().get(&4).unwrap());
}
once_cell
safe
use std::collections::HashMap; use std::sync::Mutex; use once_cell::sync::Lazy; static MAP: Lazy>> = Lazy::new(|| { let mut map = HashMap::new(); map.insert(1, "a"); map.insert(2, "b"); map.insert(3, "c"); Mutex::new(map) }); fn main() { println!("{}", MAP.lock().unwrap().get(&1).unwrap()); println!("{}", MAP.lock().unwrap().get(&2).unwrap()); println!("{}", MAP.lock().unwrap().get(&3).unwrap()); MAP.lock().unwrap().insert(4, "d"); println!("{}", MAP.lock().unwrap().get(&4).unwrap()); }
unsafe
use std::collections::HashMap; use once_cell::sync::Lazy; static mut MAP: Lazy> = Lazy::new(|| { let mut map = HashMap::new(); map.insert(1, "a"); map.insert(2, "b"); map.insert(3, "c"); map }); fn main() { unsafe { println!("{}", MAP.get(&1).unwrap()); println!("{}", MAP.get(&2).unwrap()); println!("{}", MAP.get(&3).unwrap()); MAP.insert(4, "d"); println!("{}", MAP.get(&4).unwrap()); } }



