Элиминация времени жизни в проверщике ссылок Rust

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом лабе мы исследуем концепцию элимирования в Rust, где проверщик ссылок позволяет опускать общие шаблоны времени жизни, чтобы повысить читаемость и уменьшить количество набираемых символов.

Примечание: Если в лабе не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с помощью rustc main.rs &&./main.

Элиминация

Некоторые шаблоны времени жизни встречаются чрезвычайно часто, и поэтому проверщик ссылок позволяет вам их опускать, чтобы сократить количество набираемых символов и повысить читаемость. Это называется элиминацией. Элиминация существует в Rust только потому, что эти шаблоны распространены.

Следующий код демонстрирует несколько примеров элиминации. Для более полного описания элиминации см. раздел "Элиминация времени жизни" в книге.

// `elided_input` и `annotated_input` по существу имеют одинаковые сигнатуры,
// потому что время жизни `elided_input` выводится компилятором:
fn elided_input(x: &i32) {
    println!("`elided_input`: {}", x);
}

fn annotated_input<'a>(x: &'a i32) {
    println!("`annotated_input`: {}", x);
}

// Аналогично, `elided_pass` и `annotated_pass` имеют одинаковые сигнатуры,
// потому что время жизни добавляется неявно к `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));
}

Резюме

Поздравляем! Вы завершили лабу по Элиминации. Вы можете практиковаться в более многих лабах в LabEx, чтобы улучшить свои навыки.