הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Изменяемость"><strong><a l:href="#Изменяемость">Изменяемость</a></strong></p>

По умолчанию связывание переменных является неизменяемым, но с помощью модификатора mut можно разрешить изменения.

fn main() {

let _immutable_binding = 1;

let mut mutable_binding = 1;

println!("Перед изменением: {}", mutable_binding);

// Ok

mutable_binding += 1;

println!("После изменения: {}", mutable_binding);

// Ошибка!

_immutable_binding += 1;

// ИСПРАВЬТЕ ^ Закомментируйте эту строку

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

<p id="Область_видимости_и_затенение"><strong><a l:href="#Область_видимости_и_затенение">Область видимости и затенение</a></strong></p>

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

fn main() {

// Эта переменная живёт в функции main

let long_lived_binding = 1;

// Это блок, он имеет меньшую область видимости, чем функция main

{

// Эта переменная существует только в этом блоке

let short_lived_binding = 2;

println!("inner short: {}", short_lived_binding);

// Эта переменная *затеняет* собой внешнюю

let long_lived_binding = 5_f32;

println!("inner long: {}", long_lived_binding);

}

// Конец блока

// Ошибка! `short_lived_binding` нет в этой области видимости

println!("outer short: {}", short_lived_binding);

// ИСПРАВЬТЕ ^ Закомментируйте строку

println!("outer long: {}", long_lived_binding);

// Это связывание так же *скрывает* собой предыдущие

let long_lived_binding = 'a';

println!("outer long: {}", long_lived_binding);

}

Перейти на страницу:

Похожие книги