Область видимости и скрытие

RustRustBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

Область видимости и скрытие

Связывания переменных имеют область видимости и ограничиваются жизнью в блоке. Блок - это коллекция инструкций, заключенных в фигурные скобки {}.

fn main() {
    // Это связывание существует в функции main
    let long_lived_binding = 1;

    // Это блок, и его область видимости меньше, чем область видимости функции main
    {
        // Это связывание существует только в этом блоке
        let short_lived_binding = 2;

        println!("внутри short: {}", short_lived_binding);
    }
    // Конец блока

    // Ошибка! `short_lived_binding` не существует в этой области видимости
    println!("внешний short: {}", short_lived_binding);
    // FIXME ^ Закомментируйте эту строку

    println!("внешний long: {}", long_lived_binding);
}

Также допускается скрытие переменной.

fn main() {
    let shadowed_binding = 1;

    {
        println!("до скрытия: {}", shadowed_binding);

        // Это связывание *скрывает* внешнее
        let shadowed_binding = "abc";

        println!("скрыто в внутреннем блоке: {}", shadowed_binding);
    }
    println!("за пределами внутреннего блока: {}", shadowed_binding);

    // Это связывание *скрывает* предыдущее связывание
    let shadowed_binding = 2;
    println!("скрыто в внешнем блоке: {}", shadowed_binding);
}

Резюме

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