• 变量用法与特征


    变量绑定

    let a = "hello world" 
    

     

    为何不用赋值而用绑定呢(其实你也可以称之为赋值,但是绑定的含义更清晰准确)?这里就涉及 Rust 最核心的原则——所有权,简单来讲,任何内存对象都是有主人的,而且一般情况下完全属于它的主人,绑定就是把这个对象绑定给一个变量,让这个变量成为它的主人(聪明的读者应该能猜到,在这种情况下,该对象之前的主人就会丧失对该对象的所有权),像极了我们的现实世界,不是吗?

    变量可变性

    Rust 的变量在默认情况下是不可变的。可以通过 mut 关键字让变量变为可变的,让设计更灵活。

    let mut a = 123;
    

    使用下划线开头忽略未使用的变量

    如果你创建了一个变量却不在任何地方使用它,Rust 通常会给你一个警告,因为这可能会是BUG。但是有时创建一个不会被使用的变量是有用的,比如你正在设计原型或刚刚开始一个项目。这时你希望告诉 Rust 不要警告未使用的变量,为此可以用下划线作为变量名的开头

     

    let _x = 5;
    

    变量解构

    let 表达式不仅仅用于变量的绑定,还能进行复杂变量的解构:从一个相对复杂的变量中,匹配出该变量的一部分内容:

    let (a, mut b): (bool,bool) = (true, false);
    

     

    变量和常量之间的差异

    常量(constant)与不可变变量一样,常量也是绑定到一个常量名且不允许更改的值,但是常量和变量之间存在一些差异:

    • 常量不允许使用 mut常量不仅仅默认不可变,而且自始至终不可变,因为常量在编译完成后,已经确定它的值。
    • 常量使用 const 关键字而不是 let 关键字来声明,并且值的类型必须标注。

    💡 Rust 常量的命名约定是全部字母都使用大写,并使用下划线分隔单词,另外对数字字面量可插入下划线以提高可读性

     

    const MAX_POINTS: u32 = 100_000;
    

     

    变量遮蔽(shadowing)

    Rust 允许声明相同的变量名,在后面声明的变量会遮蔽掉前面声明的

    1. fn main() {
    2. let x = 5;
    3. // 在main函数的作用域内对之前的x进行遮蔽
    4. let x = x + 1;
    5. {
    6. // 在当前的花括号作用域内,对之前的x进行遮蔽
    7. let x = x * 2;
    8. println!("The value of x in the inner scope is: {}", x);
    9. }
    10. println!("The value of x is: {}", x);
    11. }

     

    这和 mut 变量的使用是不同的,第二个 let 生成了完全不同的新变量,两个变量只是恰好拥有同样的名称,涉及一次内存对象的再分配 ,而 mut 声明的变量,可以修改同一个内存地址上的值,并不会发生内存对象的再分配,性能要更好。

    变量遮蔽的用处在于,如果你在某个作用域内无需再使用之前的变量(在被遮蔽后,无法再访问到之前的同名变量),就可以重复的使用变量名字,而不用绞尽脑汁去想更多的名字。

  • 相关阅读:
    海康工业相机如何提高相机帧率
    基于SSM的快餐店点餐服务系统设计与实现
    【MySQL】Mysql范式及外键作用
    【Redis 进阶】Redis 典型应用 —— 缓存(cache)
    Java学习笔记(三)——运算符
    基于jeecgboot的主从表改造成抽屉式的字典操作模式
    Python手写人脸识别
    ABBYY FineReader2023最新版本OCR文字识别软件PDF
    Node.js的基本概念&&node -v 和npm -v 这两个命令的作用
    我们必须要了解的Java位运算(不仅限于Java)
  • 原文地址:https://blog.csdn.net/m0_73088370/article/details/126386652