and*_*y g 5 hashmap libraries rust
我希望有一个可扩展的字典Object与&'static str我的库内部链接在一起.HashMap对于这个来说,它似乎是正确的数据结构,但是我如何使它成为全局的,在声明和可变的情况下初始化?
所以像这样:
use std::collections::HashMap;
enum Object { A, B, C }
const OBJECT_STR: &'static [&'static str] = &[ "a", "b", "c" ];
static mut word_map: HashMap<&'static str, Object> = {
let mut m = HashMap::new();
m.insert(OBJECT_STR[0], Object::A);
m.insert(OBJECT_STR[1], Object::B);
m.insert(OBJECT_STR[2], Object::C);
m
};
impl Object {
...
}
Run Code Online (Sandbox Code Playgroud)
lazy_static箱子可以做到这一点.如他们的例子所示.由于访问静态变量的可变性是不安全的,因此需要将其包装成一个Mutex.我建议不要HashMap公开,而是提供一组锁定和提供访问权限的方法HashMap.查看关于制作全局可变单例的答案.
#[macro_use]
extern crate lazy_static;
use std::collections::HashMap;
use std::sync::Mutex;
lazy_static! {
static ref HASHMAP: Mutex<HashMap<u32, &'static str>> = {
let mut m = HashMap::new();
m.insert(0, "foo");
m.insert(1, "bar");
m.insert(2, "baz");
Mutex::new(m)
};
}
fn main() {
let mut map = HASHMAP.lock().unwrap();
map.insert(3, "sample");
}
Run Code Online (Sandbox Code Playgroud)