Menu
Coddy logo textTech

Затенение, часть 2

Часть раздела Fundamentals путешествия по Rust на Coddy — урок 48 из 75.

Когда вы затеняете переменную в Rust, новая переменная становится полностью независимой от исходной, и ей требуется собственное объявление изменяемости. Затенение не наследует изменяемость исходной переменной.

let mut mut_val = 7;
// Исходная переменная является изменяемой
{ 
    let mut_val = 8;
    // Это новая переменная, которая затеняет внешнюю mut_val
      
    mut_val = 50;
    // Произошла ошибка, потому что
    // mut_val не является изменяемой
}
// Здесь всё в порядке 
// mut_val не заморожена в этой области видимости
mut_val = 3;

Чтобы исправить это, мы можем добавить mut во внутренней области видимости:

{
	let mut mut_val = 8;
	mut_val = 50;
}
challenge icon

Задание

Новичок

Исправьте данный код, чтобы он работал без ошибок.

Шпаргалка

При затенении переменной в Rust новая переменная полностью независима и требует собственного объявления изменяемости. Затенение не наследует изменяемость от исходной переменной.

let mut mut_val = 7;
// Исходная переменная является изменяемой
{ 
    let mut_val = 8;
    // Это затеняет внешнюю mut_val, но является неизменяемым
      
    mut_val = 50;
    // Ошибка: mut_val не является изменяемой в этой области видимости
}

Чтобы исправить это, добавьте mut к затеняющей переменной:

{
    let mut mut_val = 8;
    mut_val = 50; // Теперь это работает
}

Попробуйте сами

fn main() {
    // Исправьте этот код, чтобы он заработал
    let number = 42;
    {
        let number = number;
        println!("number is {}", number);
        number = 100;  // Это вызовет ошибку
        println!("number is {}", number);
    }
    println!("number is {}", number);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Fundamentals