Rust个人学习之聊聊Rust的变量

news2024/9/23 12:21:56

        今天看了Rust的变量相关内容,Rust变量很重要的一个设计点是: Rust变量默认是不可变的。

很难理解? 我们接下来一起研究一下Rust的变量, 在Rust中变量是通过关键字let进行声明的

let x = 5;

上述语句就是定义了一个名称为x的变量,变量的值为5,而这个x是不可变的,当我们尝试去修改的时候会报错,修改代码如下:

fn main() {
    let x = 5;
    println!("x is: {}", x);
    x = 6;  // 类似C语言的变量修改
    println!("x is: {}", x);
}
[root@localhost branches]# vim src/main.rs
[root@localhost branches]# cargo check
    Checking branches v0.1.0 (/root/code/branches)
error[E0384]: cannot assign twice to immutable variable `x`
 --> src/main.rs:4:5
  |
2 |     let x = 5;
  |         -
  |         |
  |         first assignment to `x`
  |         help: consider making this binding mutable: `mut x`
3 |     println!("x is: {}", x);
4 |     x = 6;
  |     ^^^^^ cannot assign twice to immutable variable

For more information about this error, try `rustc --explain E0384`.
error: could not compile `branches` due to previous error

这个设计有点意思,可能是Rust以安全为主要设计目标吧,但是如果我们需要一个可变的变量该如何做呢? Rust提供了另外一个关键字“mut”,代码如下:

fn main() {
    let mut x = 5;  // 定义时添加关键字mut
    println!("x is: {}", x);
    x = 6;
    println!("x is: {}", x);
}

此时再check一次就可以编译通过了。这里还有个问题,当变量不可变时那么与常量有什么区别呢?首先说明一下,在Rust语言中定义常量主要使用关键字const进行定义

const MAX_NUM = 10000;

Rust中常量的名称约定俗成采用全大写字母,单词之间采用下划线进行连接。事实上两者还是有些许差异的:

1、变量定义使用let,常量定义使用const;

2、变量默认是不可变的,添加mut关键字后可变;但是常量是永远不可变的;

3、常量可以在任意作用域中定义,甚至可以是全局;

说完变量,再浅聊一下Rust的数据类型,今天学习到的内容主要有两种数据类型子集:标量类型、复合类型。

标量类型是单个值类型的统称:整数、浮点数、布尔值以及字符

整数包括内容如下:

(注:图片内容摘自《Rust权威指南》)

 在Rust中,浮点型包含两种类型:f32 和 f64,它们分别占用32位和64位空间。Rust默认会将浮点数类型推导为f64。布尔值与其他语言类似,包含了两个可能值:true和false,占据单个字节空间,可以使用bool表示一个布尔类型,最后一个标量类型就是字符类型char,字符类型使用单引号指定

let num = 5
let fl = 5.4
let f:bool = false
let ch:char = 'a'

复合类型包括两种:元组类型、数组

元组跟python中的tuple类似,元素类型可以不一样,但是定义后元素不可修改、不可删除,而数组跟C语言数组用法一致,此处不再展开。

今天就学习了这些内容,整理完成。

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

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

相关文章

修改esp idf hello_world_main.c,验证Strategy 策略基类。出现一个问题,加以解决

修改esp32 idf hello_world_main.c,验证Strategy 策略基类。出现几个问题,加以解决: 错误: …/main/hello_world_main.cpp: In function ‘void test01()’: …/main/hello_world_main.cpp:77:12: error: deleting object of ab…

入门力扣自学笔记228 C++ (题目编号:2042)

2042. 检查句子中的数字是否递增题目:句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词…

很好用的gRPC和WebSocket调试工具Apipost!强烈推荐

随着软件开发行业的发展,越来越多的公司和开发人员在工作中会涉及到gRPC和WebSocket等接口类型,但是目前市面上能支持这种接口的调试工具却几乎没有,国外的工具大都晦涩难懂,不符合我们的开发习惯,很难上手使用。 经过…

Android开发——APP ANR治理

一、背景介绍 ANR(Application Not Response)指应用程序无响应,通常出现在主线程被阻塞时,并伴随ANR弹窗出现。ANR发生时要么关闭当前app,要么等待,等待的结果大概率还是继续ANR,最终需要杀掉应…

在msys2上安装武汉大学的开源PPP解算软件-PRIDE PPP-AR

最近一篇文章《免费提供POSMV的GNSS数据解算服务,验潮仪丢失的一种补救》发表了以后,有一位相识的网友提供了一个重要信息:武汉大学PPP解算软件名字为PRIDE PPP-AR 开源了,其GUI自动下载星历文件进行自主解算。PRIDE PPP-AR 的官网…

2022年中小企业数字化转型路径报告(附下载链接)

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年,如何科学制定年度规划?《底层逻辑》高清配图清华大学256页…

(机器学习深度学习常用库、框架|Pytorch篇)第三节:Pytorch之torchvision详解

文章目录一:torchvision概述二:torchvision.datasets(1)官方数据集(2)自定义数据集类(3)ImageFolder手动实现三:torchvision.transforms四:torchvision.model…

【元宇宙欧米说】左手追星,右手造富——用Web3加持娱乐行业

娱乐圈如何才能与资本市场保持步调一致?Web3浪潮来袭,文娱行业如何才能踏上Web3世界的巨轮? 1月4日下午三点,VegaIdol联合创始人Linnea将以**“左手追星,右手造富——用Web3加持娱乐行业”为题,与大家共同…

界面组件DevExpress WinForms v22.2 -全新升级的皮肤和矢量图标

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

RabbitMQ的简单介绍与使用

前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前入职某税务公司。本篇文章将记录和分享RabbitMQ相关的知识点。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&#xff…

乐视宣布每周工作4天半

老板跑了,公司不但没倒,而且员工还过上了不加班不内卷的神仙生活。 典型的老虎不在家,规矩自己定啊! 神仙日子 前段时间,网上流传着一则消息,说乐视目前还有400多名员工,靠着《甄嬛传》版权和…

Cadence PCB仿真使用Allegro PCB SI 创建含差分对网络元器件的IBIS模型图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 1,概述 本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的含有差分对网络的元器件创建IBIS模型的方法。 2,创建方法 第1步:确定打开PCB文件的软件是 Allegro PCB SI 如果不是Allegro PCB SI,可执行File→Chan…

回望2022,依然值得仰望星空

转眼间 2022 年已经过去,这是我在 CSDN 创作的第二年,在文章的创作上也是脱离“博客新手”身份,正式蜕变为“博客老手”的一年,各方面收获颇丰。2021 初见 CSDN来到 CSDN 是在 2020 年的 11 月份,但是那时候并没有开始…

传感器与传感器通道

传感器 Def:以一定精确度 把 被测量转换为与之有确定对应关系的,便于应用的某种物理量的测量系统。 作用: 捕获并转换信息,非电量物理参数转换为电参数。 e.g: 速度 ->电压,电流 组成: 敏感元件(直接感受…

css移动端适配最佳实践

移动端适配,在移动端里经常有遇到,在不同分辨率移动端设备精确还原UI设计稿,这是一个令人抓狂的问题,好在有flex,box布局解决了自适应很大一部分问题。 在开始本文之前主要介绍几种笔者常用的适配方案 1、设置meta标…

美赛Day1

1 层次分析法 评价类问题 1.1 模型介绍 1.1.1 模型介绍 在对B的评价中,判断A个物体哪个最好。将B分为k个可以评价的方面分别进行打分(每个方面A个物体的分数和为1),最终对A个物体的k个方面加权求和进行比较。 1.1.2 解题思路…

剑指政企数智办公市场,通信厂商融云有何看家本领?

近年来,数字经济正在加速赋能千行百业,我国的政务办公也正加速由数字化向智能化深度扩展。在线办公市场从公有云到政企私有云的热度,已然节节攀升。近日,作为通信厂商被熟知的融云推出了“百幄”数智办公平台,正式宣布…

05数据结构——顺序表与链表

开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念,算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博…

【DETR】DETR训练VOC数据集/自定义数据集

训练DETR一、数据准备二、配置DETRReferences一、数据准备 DETR用的是COCO格式的数据集。 如果要用DETR训练自己的数据集,直接利用Labelimg标注成COCO格式。 如果是VOC数据集的话,要做一个格式转换。网上一大堆格式转换的代码都很乱,所以自己…

java基于springboot外卖系统在线订餐系统app源码厨艺论坛APP

简介 本项目主要包括了外卖订餐系统(在线订餐和外卖配送)、厨艺论坛系统、管理员后台、用户中心等功能。用户注册后可以选择餐桌在线点餐支付,也可以选择外卖配送到家的方式。 演示视频 https://www.bilibili.com/video/BV1xv411t7JD/?sha…