Для каждого значения имеется свой констекст или область видимости (scope), в рамках которой мы можем использовать данное значение. Как определяется контекст/область видимости? Обычно границами области видимости служат фигурные скобки {}, которые определяют блок кода - открывающая фигурная скобка определяет начало контекста, а закрывающая - конец контекста. Соответственно циклы и условные конструкции, функции и анонимные блоки кода образуют отдельную область видимости. Также есть глобальная область видимости - вне функции main, однако в этой обасти видимости можно определять только константы.
Объект, который определено в рамках какой-то области видимости, вне этой области видимости мы использовать не можем. Например:
fn main(){ { // здесь переменная n еще не определена, ее нельзя использовать let n = 5; // n определена и инициализирована, далее ее можно использовать println!("n = {} ", n); } // окончание области видимости переменной n // println!("n = {} ", n); // ! Ошибка - здесь переменная n уже не существует }
Здесь переменная n
определена в анонимном блоке кода, который ограничен фигурными скобками:
{ // начало области видимости переменой n let n = 5; // n определена и инициализирована, далее ее можно использовать println!("n = {} ", n); } // конец области видимости переменной n
После определения и инициализации переменной n
мы можем ее использовать вплоть до окончания ее контекста - закрывающей фигурной скобки анонимного блока.
После завершения контекста (закрывающей фигурной скобки) значение переменной удаляется, и ее мы больше не можем использовать.
Объекты могут использоваться во вложенных контекстах, но не во внешних. Например:
const A: i32 = 11; // константа A доступна в любой функции в данном файле fn main(){ let x = 22; // далее переменная x доступна в любой части функции main { // начало области видимости блока let n = 33; // далее переменная n доступна в любой части анонимного блока println!("n={}", n); println!("x={}", x); println!("A={}", A); } // далее переменную n нельзя использовать //println!("n={}", n); // ! Ошибка } // далее переменную x нельзя использовать
Здесь константа A
определена в глобальной области видимости, поэтому она доступна в любой функции, определенной в том же файле, в том
числе в любом месте функции main
.
Переменная x
, определенная в функции main, имеет в качестве области видимости - функцию main.
Поэтому ее значение может использоваться в любом месте функции с момента инициализации переменной до конца функции, в том числе во вложенном в функцию анонимном блоке.
Переменная n
, определенная в анонимном блоке, имеет в качестве области видимости данный анонимный блок. Поэтому ее значение может
применяться в любом месте анонимного блока с момента инициализации переменной до конца блока.