rust 的全局变量
在rust中不能 直接使用 static 关键字 定义 全局变量。
可以借助第三方库 lazy_static 的帮助。once_cell 似乎不如这个库稳定度高。
引入库之后
pub fn insert(name: String) { // map : MutexGuard<HashMap<...>> let mut map = MAPS.lock().unwrap(); println!("name: {:?}", map); // 因自动解引用,无需写为 *map map.insert("name".to_string(), name); println!("name: {:?}", map.get(&"name".to_string()).unwrap()); } // 在mutex释放锁前,MAPS不能被调用。否则程序陷入无限等待中。 pub fn show() { let mut map = MAPS.lock().unwrap(); println!("name: {:?}", &map); map.insert("name".to_string(), "name".to_string()); println!("name: {:?}", map.get(&"name".to_string()).unwrap()); } // "mut map" was drop with the scope end. lazy_static! { static ref MAPS: Mutex<HashMap<String, String>> = { let mut map: HashMap<String, String> = HashMap::new(); map.insert("James".to_string(), "admin".to_string()); map.insert("Jim".to_string(), "user".to_string()); Mutex::new(map) }; }
调用
fn main(){} global::insert("naming".to_string()); global::show(); Ok(()) }
结果为
```rust name: {"Jim": "user", "James": "admin"} name: "naming" name: {"Jim": "user", "name": "naming", "James": "admin"} name: "name" ```