【Rust】变量与可变性

目录

思维导图

[1. 变量与可变性](#1. 变量与可变性)

[1.1 不可变性](#1.1 不可变性)

[1.2 可变性](#1.2 可变性)

[2. 常量](#2. 常量)

[2.1 定义与特性](#2.1 定义与特性)

[3. 变量遮蔽(shadowing)](#3. 变量遮蔽(shadowing))

[3.1 影子机制](#3.1 影子机制)

[3.2 遮蔽与可变性的区别](#3.2 遮蔽与可变性的区别)

4.示例

[4.1 变量和可变性示例](#4.1 变量和可变性示例)

[4.2 可变变量示例:](#4.2 可变变量示例:)

[4.3 常量示例:](#4.3 常量示例:)

[4.4 遮蔽示例:](#4.4 遮蔽示例:)


思维导图

1. 变量与可变性

1.1 不可变性
  • 默认特性:在Rust中,变量默认是不可变的。这种设计旨在提高代码的安全性和并发性,避免因意外修改变量而引发的错误。
1.2 可变性
  • 声明可变变量 :可以通过在变量前添加mut关键字将变量声明为可变。例如,let mut x = 5;允许后续对x的值进行修改。

2. 常量

2.1 定义与特性
  • 不可变性 :常量是始终不可变的,使用const关键字声明,且必须注释类型。
  • 作用域:常量可以在任何作用域中声明,包括全局作用域,适用于需要多个部分共享的值。

3. 变量遮蔽(shadowing)

3.1 影子机制
  • 定义 :可以通过重复使用let关键字来声明与之前变量同名的新变量,这称为"影子"。
3.2 遮蔽与可变性的区别
  • 编译时错误 :如果尝试在不使用let的情况下重新赋值,将会导致编译错误。遮蔽机制允许开发者在不改变原始变量的情况下对其进行转换。
  • 类型变化:遮蔽还允许在重新声明时改变变量的类型,例如将字符串类型的变量重新声明为数字类型。

4.示例

4.1 变量和可变性示例

不可变变量示例:

复制代码
fn main() {
 let x = 5;
 println!("The value of x is: {x}");
 x = 6; // 这里会产生错误
 println!("The value of x is: {x}");
}

编译错误信息:

复制代码
error[E0384]: cannot assign twice to immutable variable `x`
 --> src/main.rs:4:5
 |
2 | let x = 5;
 | first assignment to `x`
3 | println!("The value of x is: {x}");
4 | x = 6;
 | ^^^^^ cannot assign twice to immutable variable
4.2 可变变量示例:
复制代码
fn main() {
 let mut x = 5;
 println!("The value of x is: {x}");
 x = 6; // 这里可以成功赋值
 println!("The value of x is: {x}");
}

运行输出:

复制代码
The value of x is: 5
The value of x is: 6
4.3 常量示例:
复制代码
#![allow(unused)]
fn main() {
 const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
}
4.4 遮蔽示例:
复制代码
fn main() {
 let x = 5;
 let x = x + 1; // 创建一个新的变量x
 {
 let x = x * 2; // 在内部作用域中再次创建新的变量x
 println!("The value of x in the inner scope is: {x}");
 }
 println!("The value of x is: {x}"); // 输出外部作用域的x
}

运行输出:

复制代码
The value of x in the inner scope is: 12
The value of x is: 6
相关推荐
耿雨飞12 小时前
Python 后端开发技术博客专栏 | 第 09 篇 GIL 深度解析与并发编程实战 -- 多线程、多进程、协程的选型
开发语言·python
Stark-C12 小时前
NAS音乐必备神器,全平台音乐收割机!极空间部署『Go Music DL』
开发语言·后端·golang
Ulyanov12 小时前
像素迷宫:路径规划算法的可视化与实战
大数据·开发语言·python·算法
Ailan_Anjuxi12 小时前
Python快速学习——第7章:选择语句
后端
用户791406796839312 小时前
分库分表策略
后端
常利兵12 小时前
大文件上传不再卡顿:Spring Boot 分片上传、断点续传与进度条实现全解析
spring boot·后端·php
枫叶丹412 小时前
【HarmonyOS 6.0】ArkWeb PDF预览回调功能详解:让PDF加载状态可控可感
开发语言·华为·pdf·harmonyos
小陈工12 小时前
数据库Operator开发实战:以PostgreSQL为例
开发语言·数据库·人工智能·python·安全·postgresql·开源
耿雨飞12 小时前
Python 后端开发技术博客专栏 | 第 07 篇 元类与类的创建过程 -- Python 最深层的魔法
开发语言·python
qq_120840937112 小时前
Three.js AnimationMixer 工程实战:骨骼动画、剪辑切换与时间缩放
开发语言·javascript·ecmascript