• rust变量


    一 、变量定义

    (一)语法格式
    使用let关键字定义变量

    let varname: type = value;
    如,let a: i32 = 78;
    
    • 1
    • 2

    也可以不显式指定类型

    let varname = value;
    如,let a = 78;
    
    • 1
    • 2

    一些例子

    1.布尔
    let t = true;
    let f: bool = false;
    
    2.整数
    let a = 7u8;
    let b = 32i32;
    let c: i32 = 10_000;
    let d = 0xffi32;
    
    3.小数
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
    
    4.字符
    let c = 'z';
    let z: char = 'ℤ'; 
    let heart_emoji: char = '❤';
    
    5.字符串
    let a = "foobar";
    let b = r#""foo""#;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    (二)变量可变性
    Rust变量分为可变的与不可变的:
    在默认情况下是不可变的。如果需要可变,那需要加 mut 关键字。

    let mut varname = value;
    
    • 1

    (三)静态变量
    语法格式

    static mut? IDENTIFIER : Type ( = Expression )? ;
    
    • 1

    必须为静态变量提供初始化表达式,但在外部块中的静态变量必须省略初始化表达式。
    初始化表达式是常量表达式。可以引用其他静态变量。

    例子

    static mut LEVELS: u32 = 0;
    
    • 1

    (四)常量
    常量类似于不可变变量,但是常量和不可变变量之间存在一些差异:
    变量的值是在运行时确定的,而常量的值是在编译期确定的。
    不允许对常量使用 mut
    声明常量使用 const 关键字而不是 let,并且 必须 注明类型。
    常量只能初始化为常量表达式,而不可以是在运行时才计算出的值。这是因为 常量 只是一个符号,会在 编译时 替换为具体的值,这个有点类似于C语言中的 #define 定义的符号。

    比如,

    const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
    
    • 1

    常量的名称是 THREE_HOURS_IN_SECONDS,Rust对常量的命名约定是在单词之间使用全大写加下划线。
    它的值为60(一分钟内的秒数)乘以60(一小时内的分钟数)再乘以3(小时数)的结果。
    编译器能够在编译时做简单的计算,这使我们可以选择表达式,而不是直接使用10800。

    (五)隐藏
    可以定义一个与之前变量同名的新变量。
    第二个变量隐藏了或者说遮蔽了第一个变量,此时使用该变量名都是在使用第二个变量,直到第二个变量被隐藏或第二个变量的作用域结束。
    可以重复使用 let 关键字来多次隐藏。

    比如,

    fn main() {
        let x = 5;
        let x = x + 1;
        {
             let x = x * 2;
             println!("The value of x in the inner scope is: {x}");
        }
        println!("The value of x is: {x}");
    }
    运行结果
    The value of x in the inner scope is: 12
    The value of x is: 6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    隐藏的好处
    1.可以在重新计算之后,依然保持变量不可变。
    2.可以改变变量类型。
    常用在需要转换类型的场景。它允许我们复用变量的名字,而不是被迫创建两个不同变量。

    let spaces = " ";
    let spaces = spaces.len(); 
    
    • 1
    • 2

    第一个 spaces 变量是字符串类型,第二个 spaces 变量是数字类型。隐藏使我们不必使用不同的名字,如 spaces_str 和 spaces_num;相反,我们可以复用 spaces 这个更简单的名字。然而,如果尝试使用 mut,将会编译错误。如下所示:

    let mut spaces = " ";
    spaces = spaces.len();//这个错误,我们不能改变变量的类型
    
    • 1
    • 2

    (六)作用域
    作用域是一个项有效的范围
    变量的作用域从其声明开始,一直延伸到包含它的代码块的末尾。在作用域结束后,变量将被销毁并释放其占用的内存。

    fn main() {
         // 代码块1
         {
             // 定义一个变量,作用域在代码块1内
             let x: i32 = 5;
             println!("The value of x is {}", x);
         } // 变量x在这里被销毁
         // 代码块2
         {
             // 定义另一个变量,作用域在代码块2内
             let y: i32 = 10;
             println!("The value of y is {}", y);
         } // 变量y在这里被销毁
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、变量使用

    定义之后,就可以直接用变量名使用变量
    例子

    let x: i32 = 5;
    println!("The value of x is {}", x);     //直接使用x这个名字
    
    • 1
    • 2
  • 相关阅读:
    nvm 基础安装与坑点
    9.3 【MySQL】系统表空间
    SQL练习
    1.4_5 Axure RP 9 for mac 高保真原型图 - 案例4 【旋转的唱片2】计时器
    腾讯云轻量数据库1核1G评测和租用价格表
    第五章:Ajax高级
    猿创征文 |【Ant Design Pro】使用ant design pro做为你的开发模板(五)去除无效代码,生成一个清晰的开发模板
    mapreduce--流量统计
    创新案例|Amazon.com 2023 年营销策略:电子商务零售巨头商业案例研究
    【牛客 - 剑指offer】JZ64 求1+2+3+...+n Java实现
  • 原文地址:https://blog.csdn.net/inxunxun/article/details/133592018