Variable Bindings(работа с переменными)

        
            //0 - простое присваивание
                let x = 5;

            //1 - распаковка значений

                let (x, y) = (1, 2);

            //2 - обозначение типа переменной

                let x: i32 = 5;

            //3 - неизменяемость

                //выдаст ошибку
                let x = 5;
                x = 10; 

            //4 - область видимости и замена переменных

                //пример ошибочного кода, переменная на доступна вне блока
                let x: i32 = 17;
                {
                    let y: i32 = 3;
                    println!("The value of x is {} and value of y is {}", x, y);
                }
                println!("The value of x is {} and value of y is {}", x, y); // This won't work

                //пример замены переменных
                let x: i32 = 8;
                {
                    println!("{}", x); // Prints "8"
                    let x = 12;
                    println!("{}", x); // Prints "12"
                }
                println!("{}", x); // Prints "8"
                let x =  42;
                println!("{}", x); // Prints "42"

                //пример смены типа и изменяемости переменной
                let mut x: i32 = 1;
                x = 7;
                let x = x; // x is now immutable and is bound to 7

                let y = 4;
                let y = "I can also be bound to text!"; // y is now of a different type