< 返回我的博客

黑豆腐 发表于 2020-10-27 23:27

Tags:rust

lazy_static可以动态产生全局的静态变量,而lazy则表示在变量第一次调用时才对变量进行初始化的。有了这个库就可以产生看起来静态的堆变量,比如VecHashMap之类。引入库:

[dependencies]
lazy_static = "1.4.0"

使用:比如要产生一个HashMap

use lazy_static::lazy_static;
use std::collections::HashMap;

lazy_static! {
    static ref HASHMAP: HashMap<u32, &'static str> = {
        let mut m = HashMap::new();
        m.insert(0, "foo");
        m.insert(1, "bar");
        m.insert(2, "baz");
        m
    };
}

那如果以上代码写在main.rs中,那么可以直接调用

fn main() {
    println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap());
    println!("The entry for `1` is \"{}\".", HASHMAP.get(&1).unwrap());
}

而如果以上代码写在xxx.rs中,那么可以这么调用

fn main() {
    println!("The entry for `0` is \"{}\".", xxx::HASHMAP.get(&0).unwrap());
    println!("The entry for `1` is \"{}\".", xxx::HASHMAP.get(&1).unwrap());
}

也就是说这里的HASHMAP看起来确实就像是一个静态的全局变量。是不是很好用?

评论区

写评论

还没有评论

1 共 0 条评论, 1 页