Доступ к затененной переменной в Rust

Есть ли в Rust способ получить доступ к переменной (объявленной в основном контексте) во внутреннем контексте, пока она затенена во внутреннем контексте?

Ниже приведен код, который я пробовал. Похоже, оператор области :: не поддерживается в Rust?

fn main() {
    let top_variable = 1;

    {
        println!("top variable in inner scope before shadowing = {}", top_variable);

        let top_variable = "abc";

        println!("top variable in the inner scope = {}", top_variable);
        println!("top variable accessed in the inner scope using scope parameter = {}", ::top_variable);
    }

    println!("top variable back in the main scope = {}", top_variable);
    let top_variable = 100;
    println!("top variable in the main scope and modified  = {}", top_variable);
}

Нет. Новая переменная буквально затеняет предыдущую, поэтому у вас больше нет имени, чтобы ссылаться на нее.

vallentin 11.03.2024 14:42

Нет, и это особенность, насколько я понимаю. Если вам нужно обратиться к обеим переменным в одном контексте, просто дайте им разные имена. Все остальное приведет к коду, который будет ужасно читать и понимать.

ChrisB 11.03.2024 14:46

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

Sven Marnach 11.03.2024 15:06

> Похоже, оператор области видимости :: не поддерживается в Rust? Этот синтаксис ::top_variable не работает ни на одном языке, который я использовал. Например, в C++ префикс :: можно использовать только для доступа к глобальным, но не к локальным значениям.

Jason Orendorff 11.03.2024 16:26

Спасибо за ответы. подтвердил мое понимание

Giridhar 12.03.2024 15:56
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
2
5
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть ли в Rust способ получить доступ к переменной (объявленной в основном контексте) во внутреннем контексте, пока она затенена во внутреннем контексте?

нет.

Ниже приведен код, который я пробовал. Похоже, оператор области :: не поддерживается в Rust?

Он прекрасно поддерживается, это означает «глобальный путь», поэтому за ним должно следовать имя ящика (в версии 2018 и более поздних версий).

Другие вопросы по теме