【Rust】——变量与可变性

简介: 【Rust】——变量与可变性

🎯前言

       变量默认是不可改变的(immutable)。这是 Rust 提供给你的众多优势之一,让你得以充分利用 Rust 提供的安全性和简单并发性来编写代码。不过,你仍然可以使用可变变量。让我们探讨一下 Rust 为何及如何鼓励你利用不可变性,以及何时你会选择不使用不可变性。


🎯变量

       Rust 编译器保证,如果声明一个值不会变,它就真的不会变,所以你不必自己跟踪它。这意味着你的代码更易于推导。

   不过可变性也是非常有用的,可以用来更方便地编写代码。尽管变量默认是不可变的,你仍然可以在变量名前添加 mut 来使其可变,mut 也向读者表明了其他代码将会改变这个变量值的意图。


🎯常量

  • 常量 (constants) 是绑定到一个名称的不允许改变的值,不过常量与变量还是有一些区别:

      — 首先,不允许对常量使用 mut。常量不光默认不可变,它总是不可变。声明常量使const 关键字而不是 let,并且 必须 注明值的类型。

      — 常量可以在任何作用域中声明,包括全局作用域,这在一个值需要被很多部分的代码用到时很有用。

      — 最后一个区别是,常量只能被设置为常量表达式,而不可以是其他任何只能在运行时计算出的值。

  • 在程序运行期间,常量在其声明的作用域内一直有效
  • 命名规范:Rust里常量使用全大写字母,每个单词之间用下划线分开,例如:
  • —MAX_POINTS

提醒:可以在数字里面可以加入下划线,增加可读性,如:const MAX:u32=100_100.


🎯Shadowing(隐藏)

       我们可以定义一个与之前变量同名的新变量。Rustacean 们称之为第一个变量被第二个 隐藏(Shadowing) 了,这意味着当您使用变量的名称时,编译器将看到第二个变量。实际上,第二个变量“遮蔽”了第一个变量,此时任何使用该变量名的行为中都会视为是在使用第二个变量,直到第二个变量自己也被隐藏或第二个变量的作用域结束。可以用相同变量名称来隐藏一个变量,以及重复使用 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}");
}

分析:这个程序首先将 x 绑定到值 5 上。接着通过 let x = 创建了一个新变量 x,获取初始值并加 1,这样 x 的值就变成 6 了。然后,在使用花括号创建的内部作用域内,第三个 let 语句也隐藏了 x 并创建了一个新的变量,将之前的值乘以 2,x 得到的值是 12。当该作用域结束时,内部 shadowing 的作用域也结束了,x 又返回到 6。

隐藏与将变量标记为 mut 是有区别的:


  • 当不小心尝试对变量重新赋值时,如果没有使用 let 关键字,就会导致编译时错误。
  • 通过使用 let,我们可以用这个值进行一些计算,不过计算完之后变量仍然是不可变的。
  • 当再次使用 let 时,实际上创建了一个新变量,我们可以改变值的类型,并且复用这个名字。

    let spaces = "   ";
    let spaces = spaces.len();

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

    let mut spaces = "   ";
    spaces = spaces.len();


类型不匹配。

相关文章
|
6月前
|
Rust JavaScript 前端开发
【一起学Rust | 基础篇】Rust基础——变量和数据类型
【一起学Rust | 基础篇】Rust基础——变量和数据类型
93 0
|
4月前
|
存储 Rust JavaScript
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
|
5月前
|
Rust 开发者
Rust变量与常量介绍
Rust变量与常量介绍
|
5月前
|
Rust 安全
Rust变量、常量声明与基本数据类型
Rust变量、常量声明与基本数据类型
|
6月前
|
存储 Rust 编译器
Rust中不可变变量与const有何区别?
Rust作者认为变量默认应该是`immutable`,即声明后不能被改变的变量。这一点是让跨语言学习者觉得很别扭,不过这一点小的改变带来了诸多好处,本节我们来学习Rust的变量。
75 9
Rust中不可变变量与const有何区别?
|
6月前
|
存储 Rust 编译器
Rust变量与数据类型
Rust变量与数据类型
|
6月前
|
Rust 安全 编译器
深入Rust的所有权系统:理解变量的所有权
本文详细探讨了Rust编程语言中所有权系统的核心概念,包括变量的所有权、生命周期、借用规则和内存安全。通过理解这些概念,我们能够编写出更加高效、安全和可维护的Rust代码。
|
6月前
|
存储 Rust 安全
Rust中的变量与常量:定义与使用的深入解析
本文将详细探讨Rust编程语言中变量与常量的定义、特性及其使用场景。我们将从基本概念出发,逐步深入到Rust的内存管理、所有权系统和不变性原则,帮助读者更好地理解和应用这两种基础元素。
|
6月前
|
存储 Rust 编译器
Rust 笔记:Rust 语言中的常量与变量
Rust 笔记:Rust 语言中的常量与变量
98 0
|
Rust JavaScript 安全
Rust 变量和基本数据类型
本文简单介绍了 Rust 中声明变量的方式,主要是使用 let 和 const 关键字。然后介绍了四种基本数据类型,包括整数类型,浮点类型,字符类型和布尔类型。
157 0
下一篇
无影云桌面