Rust-02-变量与可变性

news2024/10/6 22:19:55

在Rust中,变量和可变性是两个重要的概念。

  • 变量:变量是用于存储数据的标识符。在Rust中,变量需要声明其类型,例如:
let x: i32 = 5; // 声明一个名为x的变量,类型为i32(整数),值为5
  • 可变性:Rust中的变量有两种可变性:可变(mutable)和不可变(immutable)。默认情况下,变量是不可变的,这意味着一旦赋值,其值就不能更改。要使变量可变,需要在声明时使用mut关键字,例如:
let mut x: i32 = 5; // 声明一个名为x的可变变量,类型为i32(整数),值为5
x = 6; // 修改x的值为6

需要注意的是,在同一作用域内,一个可变变量不能同时被多次声明为不可变。例如,以下代码会导致编译错误:
在这里插入图片描述

常量

类似于不可变变量,常量 (constants) 是绑定到一个名称的不允许改变的值,不过常量与变量还是有一些区别。首先,不允许对常量使用 mut 。常量不光默认不可变,它总是不可变。声明常量使用 const关键字而不是 let ,并且 必须 注明值的类型。常量可以在任何作用域中声明,包括全局作用域,这在一个值需要被很多部分的代码用到时很有用。最后一个区别是,常量只能被设置为常量表达式,而不可以是其他任何只能在运行时计算出的值。

    const FMT_DATE_TIME_YMDHMS: &str = "yyyy-MM-dd hh:mm:ss"; // 常量

在声明它的作用域之中,常量在整个程序生命周期中都有效,此属性使得常量可以作为多处代码使用的全局范围的值,例如一个游戏中所有玩家可以获取的最高分或者光速。将遍布于应用程序中的硬编码值声明为常量,能帮助后来的代码维护人员了解值的意图。如果将来需要修改硬编码值,也只需修改汇聚于一处的硬编码值。

作用域

使用let对变量重新计算和使用mut是有区别的,当不小心尝试对变量重新赋值时,如果没有使用 let关键字,就会导致编译时错误。通过使用 let ,我们可以用这个值进行一些计算,不过计算完之后变量仍然是不可变的。

fn main() {
    let x = 5;
    let x = 1 + x;

    {
        let x = x + 5;
        println!("{}",x); // 6+5=11
    }

    println!("{}",x); // 6
}

结果

C:/Users/tom.qu/.cargo/bin/cargo.exe run --color=always --package rust --bin rust
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target\debug\rust.exe`
11
6

mut 与覆盖的另一个区别是,当再次使用 let 时,实际上创建了一个新变量,我们可以改变值的类型,并且复用这个名字。
在这里插入图片描述

总结

    let mut x = 5; // 可变变量
    let y = 5; // 不可变变量
    const FMT_DATE_TIME_YMDHMS: &str = "yyyy-MM-dd hh:mm:ss"; // 常量
    // 使用let可以复用变量名
    // 变量作用域问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1806952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ApiJson快速入门

前言 最近在正式迭代中插入了一个大屏演示项目,因为后端开发人员任务都安排满了,而演示项目逻辑比较简单,大多是直接查表就能搞定,所以只能想办法让前端直接和数据库交互,增加开发速度。在找工具时发现了ApiJson。尝试…

私有云和多云管理平台 | Cloudpods v3.11.4 正式发布

本次 3.11.4 更新亮点为:系统镜像引入社区镜像,用户可以一键导入各主流开源操作系统镜像,方便用户上手使用。持续迭代共享 LVM,支持快照,主备机等特性,修复迁移删除镜像缓存等 BUG。 功能优化 【费用】费…

大众汽车裁员加速,38万元遣散费起步

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 几周前,大众汽车宣布了一项新的裁员计划。 一、裁员行动与额外福利并行 大众汽车近期在裁员行动上取得了显著进展,其遣散…

html接口响应断言

接口响应值除类json格式,还有html格式 断言步骤 第一步:替换空格replace 原本返回的格式和网页内容一致,每行前面有很多空格,需要去除这些空格 第二步:分割split 因为行与行之前有回车符,所以把回车符替换掉,返回值为数组 数组不能直接打印数组,需要格式转换 第三…

基于实验的电动汽车动力电池SOC

前言 本文为笔者在学习《基于MATLAB的新能源汽车仿真》过程中学习笔记,所涉及的表格数据和公式均为书籍里的。仿真数据是网上找的恒电流放电数据。本文仅作为笔者的入门学习记录。 一、分析动力电池SOC估算方法 SOC是指动力电池按照规定放电条件可以释放的容量占…

国标GB/T 28181详解:校时流程详细说明

目录 一、定义 二、作用 1. 时间同步性 2. 事件记录的准确性 3. 跨平台、跨设备协作 4. 降低时间误差 5. 安全性提升 三、基本要求 四、命令流程 五、协议接口 六、校时效果 1、未校时的情况 2、校时后的效果 七、参考 一、定义 GB28181协议要求所有的监控设…

多种策略提升线上 tensorflow 模型推理速度

前言 本文以最常见的模型 Bi-LSTM-CRF 为例,总结了在实际工作中能有效提升在 CPU/GPU 上的推理速度的若干方法,包括优化模型结构,优化超参数,使用 onnx 框架等。当然如果你有充足的 GPU ,结合以上方法提升推理速度的效…

Edge浏览器视频画中画可拉动进度条插件Separate Window

平时看一些视频的时候,一般需要编辑一些其他的东西,于是开启画中画,但是画中画没有进度条,需要大幅度的倒退前进得回到原视频,很麻烦。这里推荐插件Separate Window,可实现画中画进度条拉动和播放sudu的调节…

商城项目【尚品汇】08异步编排

文章目录 1.线程的创建方式1.1继承Thread类,重写run方法1.2实现Runnable接口,重写run方法。1.3实现Callable接口,重新call方法1.4以上三种总结1.5使用线程池创建线程1.5.1线程池创建线程的方式1.5.2线程池的七大参数含义1.5.3线程池的工作流程…

LLVM Cpu0 新后端5 静态重定位 动态重定位

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

springboot集成uid-generator生成分布式id

一、简介 uid-generator是由百度技术部开发,GitHub地址 UidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器 Snowflake算法 Snowflake算法描述:指定机器 & 同一时刻 & 某一并发序列,是唯一的。据此可生成一个64 bits的唯一ID&#x…

【Linux】信号(二)

上一章节我们进行了信号产生的讲解。 本节将围绕信号保存展开。 目录 信号保存:信号的一些概念:关于信号保存的接口:sigset_t的解释:对应的操作接口:sigprocmask:sigpending:代码实践&#xf…

Macbook M芯片JDK的安装

Macbook M芯片JDK的安装 下载 搜索zulu; 进入这个网址 https://www.azul.com/downloads/#zulu 进入页面后向下滑动 选择对应选项 然后点击Download进行下载。 选择.dmg格式的安装包,点击。 安装 下载完成后,到下载目录,双击…

日进2000,我怎么做到的

昨天遇到一个有意思的项目,让我一天进账2000,一个字:爽。 这几天接洽了一位新客户,主要诉求就是优化系统,基于LNMP的系统优化。正好这个领域我比较熟悉,以前都是在公司做项目,也不怎么涉猎系统优…

LabVIEW硬件与仿真双模式设计液压系统

在实际项目中,结合LabVIEW与液压运动控制器,通过设计两种运行方式:硬件运行和仿真运行,使得系统既能进行实际操作又能进行仿真测试。此设计不仅方便了开发调试,也为教学培训和展示提供了极大的便利。本文将从项目背景、…

【优选算法】栈 {后缀表达式求值;中缀转后缀表达式;中缀表达式求值}

一、经验总结 何时使用栈结构解题? 做过相似的使用栈结构解得的题目嵌套处理:在从前向后处理的过程中,由于之后内容的不确定性而导致当前操作不能贸然进行,需要先进行保存,直到遇到区间结束标志(如’)&am…

MLU370-M8 chattts-ui快速出击

目录 一、paas平台环境选择二、代码环境准备1.代码下载2.环境安装modelsopetransformersaccelerate 3.常规pip安装4.代码修改4.代码修改 三.算法启动 一、paas平台环境选择 驱动选择:5.10.22及以上 镜像选择:pytorch2.1 二、代码环境准备 1.代码下载…

HC-SR505人体感应灯

1硬件 1.1硬件组成 1.正点原子探索者开发板 2 HC-SR505迷你小型人体感应模块 3 继电器+5V小灯 HC-SR505迷你小型人体感应模块介绍 1.2 硬件连接 1.HC-SR505(连接在PE0) 2.继电器(连接在PE1) 2.主要代码 int ma…

【Stable Diffusion】(基础篇一)—— Stable Diffusion的安装

本系列笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili **Stable Diffusion(简称…

SpringCloud Gateway中Filters详细说明

前面 https://blog.csdn.net/J080624/article/details/139494909 我们研究了GateWay中各种路由断言的使用。SpringCloud GateWay 还提供了各种过滤器用来对请求和响应进行处理。 官网地址:SpringCloud Gateway Filter 【1】GatewayFilter Factories 路由过滤器允…