By invoking the lazy_static! macro [10, 21 and 29], we define a lazily initialized object in the current scope. Lazy here means created only the first time it is used.
Contrary to a let binding, its scope can also be the global scope [10]. A realistic example for this is creating a collection with a known content that is used by many functions, as the alternative would be to create it once and pass it around endlessly.
If your lazy_static consists of a Vec with content that is known at compile time, you can instead use a const array, as its construction is constant. In terms of code, this means you don't need to use this:
lazy_static!{Instead, you can use the following:
static ref FOO: Vec<&'static str> = vec!["a", "b", "c"];
}
const FOO: [&str; 3] = ["a", "b", "c"];
Remember when, in Chapter 1, Learning the Basics; Querying with Regexes, we talked about how compiling Regexes is...