123456789101112131415161718192021222324252627282930313233343536 |
- 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(&0), Some(&"bar"));
- }
|