ОБЛАСТЬ

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

ПРИМЕР 10.1: ПРОВЕРКА ОБЛАСТИ
Имя файла: scope_shadow/src/main.rs

fn main() {
    
    let main_a = "MAIN OUTER SCOPE";    
    {        
        let block_a = "BLOCK INNER SCOPE";
        println!("block_a is {}", block_a);
        let main_a = "MAIN BLOCK INNER SCOPE";
        println!("main_a is {}", main_a);
    }    
  
    println!("block_a is {}", block_a);
    println!("main_a is {}", main_a);
    
   
}

ПРИМЕР 10.1 Объяснение: Строка println!(“block_a is {}”, block_a); присутствие вне блока вызовет ошибку, поскольку переменная block_a объявлена ​​только внутри блока.

ПРИМЕР 10.2: ОБЛАСТЬ ПРИМЕНЕНИЯ
Имя файла: scope_shadow/src/main.rs

fn main() {
    
    let main_a = "MAIN OUTER SCOPE";    
    {        
        let block_a = "BLOCK INNER SCOPE";
        println!("block_a is {}", block_a);
        let main_a = "MAIN BLOCK INNER SCOPE";
        println!("main_a is {}", main_a);
    }    
  
    println!("main_a is {}", main_a);    
   
}

ПРИМЕР 10.2. Объяснение.Следующее, на что следует обратить внимание, это то, что переменная main_a объявлена ​​как внутри блока, так и вне блока. Во внутреннем блоке println! оператор, он предполагает, что значение присутствует внутри блока. Во внешнем блоке println! оператор, он предполагает, что значение присутствует в основной функции.

ТЕНИ

  • Затенение означает, что более поздняя привязка переменной с тем же именем, что и другая существующая привязка, переопределит предыдущую привязку.
  • Это означает, что первая переменная затенена второй, это означает, что можно просмотреть значение второй переменной только тогда, когда мы ее используем.
  • Но это не означает, что значение будет изменено или уничтожено, с другой стороны, это говорит о том, что значение будет продолжать существовать до тех пор, пока оно не выйдет из области видимости, даже если оно больше недоступно.
  • Затенение можно выполнять с одинаковыми именами переменных и повторять их с помощью ключевого слова let.

ПРИМЕР 10.3: SHADOWING
Имя файла: shadowing/src/main.rs

fn main() {
        let shadow = 123;
        println!(" THE VARIABLE VALUE IS {} ", shadow);
        let shadow = "RUST SHADOWING";
        println!(" THE SHADOWED VARIABLE VALUE IS {} ", shadow);
}

ПРИМЕР 10.3 Объяснение: Затенение вкратце означает повторное объявление переменной. Здесь переменной shadow изначально присваивается значение 123, затем снова объявляется переменная с тем же именем с значение связано как RUST SHADOWING. Это означает, что затенение позволяет нам повторно связать имя со значением другого типа данных. Это достигается с помощью оператора let.

ПРИМЕЧАНИЕ. Если оператор let не используется в (let shadow = 456;), это приведет к ошибке. Ключевое слово let является обязательным для затенения.

Важным фактором тени является то, что она позволяет изменить тип данных переменной во время затенения. То есть он не зависит от типа данных первой переменной ( mut зависит от типа данных первой переменной )