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"
```

 

posted @ 2022-06-21 21:02  蓝色牧客  阅读(1722)  评论(0编辑  收藏  举报