Скорочення часу життя (lifetime elision)
Деякі шаблони часу життя є надзвичайно поширеними, тож перевірник запозичень дозволить вам опускати їх, щоб не витрачати час на введення та покращити читабельність. Це відомо як скорочення часу життя. Скорочення часу життя існує в Rust лише тому, що ці шаблони поширені.
Наведений нижче код показує кілька прикладів скорочення часу життя. Для більш вичерпного опису скорочення часу життя див. скорочення часу життя у книзі.
// `elided_input` and `annotated_input` essentially have identical signatures
// because the lifetime of `elided_input` is inferred by the compiler:
fn elided_input(x: &i32) {
println!("`elided_input`: {}", x);
}
fn annotated_input<'a>(x: &'a i32) {
println!("`annotated_input`: {}", x);
}
// Similarly, `elided_pass` and `annotated_pass` have identical signatures
// because the lifetime is added implicitly to `elided_pass`:
fn elided_pass(x: &i32) -> &i32 { x }
fn annotated_pass<'a>(x: &'a i32) -> &'a i32 { x }
fn main() {
let x = 3;
elided_input(&x);
annotated_input(&x);
println!("`elided_pass`: {}", elided_pass(&x));
println!("`annotated_pass`: {}", annotated_pass(&x));
}