Есть ли в 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);
}
Нет, и это особенность, насколько я понимаю. Если вам нужно обратиться к обеим переменным в одном контексте, просто дайте им разные имена. Все остальное приведет к коду, который будет ужасно читать и понимать.
Обратите внимание, что такое затенение происходит только для локальных переменных внутри одной функции, поэтому конфликт всегда можно разрешить локально, не затрагивая общедоступные интерфейсы.
> Похоже, оператор области видимости :: не поддерживается в Rust? Этот синтаксис ::top_variable
не работает ни на одном языке, который я использовал. Например, в C++ префикс ::
можно использовать только для доступа к глобальным, но не к локальным значениям.
Спасибо за ответы. подтвердил мое понимание
Есть ли в Rust способ получить доступ к переменной (объявленной в основном контексте) во внутреннем контексте, пока она затенена во внутреннем контексте?
нет.
Ниже приведен код, который я пробовал. Похоже, оператор области :: не поддерживается в Rust?
Он прекрасно поддерживается, это означает «глобальный путь», поэтому за ним должно следовать имя ящика (в версии 2018 и более поздних версий).
Нет. Новая переменная буквально затеняет предыдущую, поэтому у вас больше нет имени, чтобы ссылаться на нее.