Rust 变量基础知识

文章目录

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

一、 Rust变量与可变性

在 Rust 编程语言中,变量的可变性质是理解 Rust 关键特性的核心之一。Rust 是一种强调安全和并发的语言,其变量系统设计旨在提供最大程度的内存安全性,同时允许程序员高效地控制资源。

1. 不可变变量

Rust 中的变量默认是不可变的。这意味着一旦你为一个变量绑定了一个值,你就不能再改变它。例如:

rust 复制代码
let x = 5;

在这个例子中,x 的值是 5,且你不能再给 x 赋予其他值。如果尝试修改它,例如:

rust 复制代码
x = 10;  // 这是一个编译错误

编译器会报错,因为 Rust 强调不可变性能提高代码的可靠性和减少错误。

2.可变变量

如果需要改变变量的值,Rust 提供了一个机制来显式声明变量为可变。通过在 let 绑定前加上 mut 关键字,可以创建一个可变变量。例如:

rust 复制代码
let mut y = 10;
y = 20;  // 这是合法的

这里,y 的初始值是 10,但之后被重新赋值为 20。这个 mut 关键字明确表示 y 的值可以改变,从而允许在程序运行时修改它的值。

3.不可变性与多线程

Rust 的不可变性不仅有助于单线程代码的稳定性,还能增强多线程编程的安全性。不可变变量可以被多个线程安全地共享,因为不会有线程修改其值。这减少了数据竞争的风险,是 Rust 的所有权和借用系统的核心部分。

二、变量与常量

在 Rust 编程语言中,变量和常量是存储数据的两种方式,它们在不可变性和使用方式上有明显区别。了解这些区别对于写出清晰且高效的 Rust 代码至关重要。以下是关于 Rust 中常量(const)的一些关键点:

1. 常量 (constant) 的特点

  • 不可变性

    常量在定义后其值是不可变的。与不可变变量类似,常量一旦绑定了值,就不能再改变。常量不能使用 mut 关键字,因为它们永远都是不可变的。

  • 声明方式

    常量使用 const 关键字进行声明,并且必须显式指定类型。例如:

    rust 复制代码
    const MAX_POINTS: u32 = 100_000;

    这里 MAX_POINTS 是一个常量,其值为 100,000,并且类型为 u32

  • 作用域

    常量可以在任何作用域中声明,包括全局作用域。它们的作用范围不限于定义所在的代码块。

  • 绑定到常量表达式

    常量只能绑定到常量表达式,而不能绑定到函数的返回值或需要在运行时才能计算出的值。例如:

    rust 复制代码
    const PI: f64 = 3.141592653589793;

    PI 绑定到一个常量表达式。常量表达式是在编译时就能确定的值。

  • 命名规范

    Rust 约定常量使用全大写字母,并用下划线分隔每个单词,例如:MAX_POINTS。这种命名规范有助于区分常量和变量。

  • 示例代码

rust 复制代码
// 定义常量
const MAX_POINTS: u32 = 100_000;
const PI: f64 = 3.141592653589793;

fn main() {
    // 使用常量
    println!("Max points: {}", MAX_POINTS);
    println!("Value of PI: {}", PI);
}

在上面的示例中,MAX_POINTSPI 是常量,其值在程序编译时就已确定,并在整个作用域内保持不变。常量的这种特性使得它们非常适合用于定义那些不会改变的固定值,例如数学常数、配置参数等。

理解常量的这些特性和使用规范,有助于在 Rust 中编写清晰且可靠的代码,确保数据的稳定性和一致性。

三、变量隐藏(shadowing)

在 Rust 编程语言中,变量隐藏 (shadowing)是一种非常有用的特性,它允许使用相同的名字声明新的变量,从而"隐藏"之前的同名变量。这种机制与变量的可变性(通过 mut 关键字)是不同的,并且在代码中具有独特的作用。

1. 什么是变量隐藏(Shadowing)

在 Rust 中,变量隐藏(shadowing)指的是重新声明一个与之前变量同名的新变量。这个新变量会遮盖(或隐藏)之前声明的同名变量。在后续代码中,使用的将是新的变量,而不是之前的变量。

2. Shadowing 的特点

  • 重新声明

    变量隐藏通过使用 let 关键字重新声明一个与之前变量同名的变量来实现。例如:

    rust 复制代码
    let x = 5;
    let x = x + 1;

    在这个例子中,第一次声明的 x 的值是 5。第二次使用 let 重新声明 x,新的 x 将是之前 x 的值加 1,即 6。这样,新的 x 隐藏了之前的 x

  • 作用域

    变量隐藏的作用范围仅限于重新声明后的代码块。也就是说,新的变量在其声明后的代码中有效,而之前的变量在这段代码中变得不可见。

  • 不可变性

    使用变量隐藏声明的新变量是不可变的,除非在新变量的声明中明确使用 mut 关键字。例如:

    rust 复制代码
    let x = 5;
    let x = x + 1;
    let x = x * 2;
    println!("The value of x is: {}", x);  // 输出 12

    在这个例子中,x 的值依次变为 6 和 12,新的 x 隐藏了之前的 x

  • mut 的不同

    变量隐藏与将变量标记为 mut(可变)是不同的。如果你标记一个变量为 mut,你可以修改这个变量的值,而变量隐藏则是通过声明新的同名变量来实现值的改变,而不是修改原有变量的值。例如:

    rust 复制代码
    let mut x = 5;
    x = x + 1;  // 修改原有变量的值

    在上面的代码中,x 是可变的,可以通过直接赋值来修改其值。

  • 示例代码

下面的代码演示了变量隐藏的基本用法:

rust 复制代码
fn main() {
    let x = 5;
    println!("The value of x is: {}", x); // 输出 5

    let x = x + 1;
    println!("The value of x after shadowing is: {}", x); // 输出 6

    let x = x * 2;
    println!("The value of x after another shadowing is: {}", x); // 输出 12
}

在这个例子中,第一次打印显示 x 的值为 5。第二次打印显示新的 x 的值为 6,第三次打印显示新的 x 的值为 12。每次使用 let 关键字重新声明 x 时,新的 x 隐藏了之前的 x

  • 变量隐藏的使用场景

    • 简化代码:变量隐藏可以帮助你在需要的地方简化代码。特别是在处理复杂的计算或临时变量时,使用隐藏可以让代码更清晰。
    • 避免不必要的 mut :通过使用变量隐藏,可以避免使用 mut 关键字,从而保持不可变性的优点,确保代码的可靠性。

变量隐藏(shadowing)是 Rust 提供的一个强大功能,它允许使用相同的名字声明新的变量,并通过新的值隐藏之前的变量。这种机制不仅帮助简化代码,也与变量的可变性(mut)机制有所区别,使得 Rust 编程更加灵活和强大。理解和掌握变量隐藏的用法,可以提高你的代码质量,并让你的程序更加健壮。

相关推荐
诚丞成24 分钟前
计算世界之安生:C++继承的文水和智慧(上)
开发语言·c++
Smile灬凉城66636 分钟前
反序列化为啥可以利用加号绕过php正则匹配
开发语言·php
lsx2024061 小时前
SQL MID()
开发语言
Dream_Snowar1 小时前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶1 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
鸿蒙自习室1 小时前
鸿蒙UI开发——组件滤镜效果
开发语言·前端·javascript
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
机器之心1 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端
汪洪墩2 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
云空2 小时前
《QT 5.14.1 搭建 opencv 环境全攻略》
开发语言·qt·opencv