当前位置: 首页 > article >正文

Rust 变量基础知识

文章目录

  • 发现宝藏
  • 1. Rust变量与可变性
  • 2. 变量与常量
  • 3. 变量隐藏(shadowing)

发现宝藏

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

1. Rust变量与可变性

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

1. 不可变变量

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

let x = 5;

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

x = 10;  // 这是一个编译错误

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

2.可变变量

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

let mut y = 10;
y = 20;  // 这是合法的

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

3.不可变性与多线程

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

2. 变量与常量

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

1. 常量 (constant) 的特点

  • 不可变性

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

  • 声明方式

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

    const MAX_POINTS: u32 = 100_000;
    

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

  • 作用域

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

  • 绑定到常量表达式

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

    const PI: f64 = 3.141592653589793;
    

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

  • 命名规范

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

  • 示例代码

// 定义常量
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 中编写清晰且可靠的代码,确保数据的稳定性和一致性。

3. 变量隐藏(shadowing)

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

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

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

2. Shadowing 的特点

  • 重新声明

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

    let x = 5;
    let x = x + 1;
    

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

  • 作用域

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

  • 不可变性

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

    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,你可以修改这个变量的值,而变量隐藏则是通过声明新的同名变量来实现值的改变,而不是修改原有变量的值。例如:

    let mut x = 5;
    x = x + 1;  // 修改原有变量的值
    

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

  • 示例代码

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

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 编程更加灵活和强大。理解和掌握变量隐藏的用法,可以提高你的代码质量,并让你的程序更加健壮。


http://www.kler.cn/a/304128.html

相关文章:

  • HTML之列表
  • jQuery笔记
  • 【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)
  • 【Java学习】电脑基础操作和编程环境配置
  • 【LLM Agents体验 3】利用Open-WebUI+Ollama本地部署Qwen2.5:7B大模型的安装指南
  • el-dialog 设置 水平垂直居中 高度不固定
  • Linux:命令行参数
  • DX-5009N 10G交换机 SFP接口+猫棒 代替运营商光猫 【注册状态O5但是无法PPPoe拨号踩坑——交换机VLAN配置】
  • Leetcode面试经典150题-69.X的平方根
  • AI教你学Python 第4天:函数和模块
  • 【HTML】可展开的顶层菜单栏
  • 拳皇97确反笔记
  • Go语言现代web开发08 if和switch分支语句
  • Spring Boot Admin集成与自定义监控告警
  • 【C++ 高频面试题】指针和引用、关于内存泄漏和野指针问题
  • 云服务器中的MinIO 配置 HTTPS 过程(图文)
  • 基于微信小程序+Java+SSM+Vue+MySQL的药店管理系统
  • Iceberg与SparkSQL查询操作整合
  • JS设计模式之适配器模式:接口天然的“翻译官”
  • 【物联网技术大作业】设计一个智能家居的应用场景
  • [项目][WebServer][项目介绍及知识铺垫][下]详细讲解
  • Java项目: 基于SpringBoot+mybatis+maven美发门店管理系统(含源码+数据库+毕业论文)
  • 【HTTP】URL的基本概念和构成
  • Unity Lua方向的面试真题详解
  • 阿里巴巴商品详情API返回值:电商精准营销的关键
  • Go语言概述