This week I learned 13
I learned all of this from Jim Blandy and Jason Orendorff’s book, Programming Rust.
Consider an enum with a single variant that holds a shared reference to str
:
enum OperatingSystem<'a> {
Unix(&'a str)
}
This lifetime is read as “OperatingSystem::Unix can live for any given
lifetime ‘a”. That is, OperatingSystem::Unix
may live until its referent is
dropped.
The following lifetime is permissible since edition
is dropped after
OperatingSystem::Unix
:
fn main() {
let edition = String::from("7th edition");
let os = OperatingSystem::Unix(&edition);
match os {
OperatingSystem::Unix(e) => println!("Unix -- {}", e),
}
}
Conversely, the following will fail to compile since OperatingSystem::Unix
outlives edition
:
fn main() {
let os: OperatingSystem;
{
let edition = String::from("7th edition");
os = OperatingSystem::Unix(&edition);
}
match os {
OperatingSystem::Unix(e) => println!("Unix -- {}", e),
}
}