37 lines
1.0 KiB
Rust
37 lines
1.0 KiB
Rust
extern crate once_cell;
|
|
|
|
use once_cell::sync::{Lazy, OnceCell};
|
|
use std::collections::HashMap;
|
|
|
|
static HASHMAP: Lazy<HashMap<u32, &'static str>> = Lazy::new(|| {
|
|
let mut m = HashMap::new();
|
|
m.insert(0, "foo");
|
|
m.insert(1, "bar");
|
|
m.insert(2, "baz");
|
|
m
|
|
});
|
|
|
|
// Same, but completely without macros
|
|
fn hashmap() -> &'static HashMap<u32, &'static str> {
|
|
static INSTANCE: OnceCell<HashMap<u32, &'static str>> = OnceCell::new();
|
|
INSTANCE.get_or_init(|| {
|
|
let mut m = HashMap::new();
|
|
m.insert(0, "foo");
|
|
m.insert(1, "bar");
|
|
m.insert(2, "baz");
|
|
m
|
|
})
|
|
}
|
|
|
|
fn main() {
|
|
// First access to `HASHMAP` initializes it
|
|
println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap());
|
|
|
|
// Any further access to `HASHMAP` just returns the computed value
|
|
println!("The entry for `1` is \"{}\".", HASHMAP.get(&1).unwrap());
|
|
|
|
// The same works for function-style:
|
|
assert_eq!(hashmap().get(&0), Some(&"foo"));
|
|
assert_eq!(hashmap().get(&1), Some(&"bar"));
|
|
}
|