lazy_static可以动态产生全局的静态变量,而lazy则表示在变量第一次调用时才对变量进行初始化的。有了这个库就可以产生看起来静态的堆变量,比如Vec
,HashMap
之类。引入库:
[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 页
评论区
写评论还没有评论