2.Rust变量

变量的声明

let关键字

在Rust中变量必须要先声明才能使用,let关键字用于声明变量并将一个值绑定到该变量上。如下:

fn main() {let var_name:i32 = 123123;println!("{}",var_name) //println! 是一个宏(macros),可以将文本输出到控制台(相当于js console.log)。
}

let声明的关键字具有模式解构功能。(怎么理解呢?相当于js中的解构赋值)

let声明变量的特点

1.模式解构:模式解构是一种用于匹配和解构数据的语法。Rust会尝试将等号右边的值与模式(=号左边的就是模式)进行匹配,并将匹配的部分绑定到变量上。
下面是一些场景的解构示例,看不懂不要着急,后面学了数据类型就明白了。

let (x, y, _) = (1, 2, 3); // 忽略元组的第三个元素
let [a, b, c] = [1, 2, 3]; // 解构数组
let Point { x, y } = Point { x: 1, y: 2 }; // 解构结构体
let Some(value) = Some(5); // 解构Option枚举类型的Some变体

2.只读的let声明的变量是只读的如果我们修改会报错,例如:

fn main() {let var_name:i32 = 123123;var_name = 111;println!("{}",var_name);
}

报错如下:
报错如下
我们可以看到也给我们提示了,不能给不可变变量var_name赋值两次,help中提示了我们可以使用mut关键字来让该变量变成可变的

 fn main() {let mut var_name:i32 = 123123;var_name = 111;println!("{}",var_name);
}

变量遮蔽

在Rust中当我们在同一作用域下声明同名变量,后声明的会“遮蔽”前面声明的变量,例如:

fn main() {let var_name:i32 = 123123;println!("{}",var_name); // 123123let var_name = "www";println!("{}",var_name); // www
}

冻结

什么是冻结?
当数据被相同的名称不变地绑定时,它还会冻结(freeze)。在不可变绑定超出作用域之前,无法修改已冻结的数据:

fn main() {let mut _mutable_integer = 7i32;{// 被不可变的 `_mutable_integer` 遮蔽let _mutable_integer = _mutable_integer;// 报错!`_mutable_integer` 在本作用域被冻结_mutable_integer = 50;// 改正 ^ 注释掉上面这行// `_mutable_integer` 离开作用域}// 正常运行! `_mutable_integer` 在这个作用域没有冻结_mutable_integer = 3;
}

使用场景

1.当我们使用变量时,需要把变量转换成另一个类型的变量,但是不改变其变量名。

fn main() {let num1:i32 = 123;let num1:i64 = 13222;
}

2.当我们需要修改变量可变性时,可以声明一个可变的变量,之后我们希望他不可变,变成只读的。

fn main() {let mut v = 123;v = 555;let v = v ;//此时v只读
}

Static静态变量

语法

fn main(){static CONFIG = "localhost"
}

特点
用关键字

  1. static声明的变量,其生命周期是整个程序启动到退出。
  2. 占用的内存空间在程序执行过程中不会回收。
  3. static声明的变量同样具有模式匹配效果。

使用要注意的地方

由于Rust十分注意内存安全,因此全局变量使用有一些限制,防止程序员写出不安全的代码。

  1. 全局变量声明时必须初始化。
  2. 全局变量初始化时必须是编译时可以确定的常量。(不能是函数调用/表达式)
fn main() {static VERSION: &str = "1.0.0"; //√let x = 1 let y = 2static VERSION:i32 = x + y;// ×static VERSION = fn() // ×
}
  1. 带有mut修饰的全局变量,在修改时,必须用unsafe关键字。(不建议使用)
fn main() {static mut VERSION:&str = "static";unsafe{VERSION = "mut static";println!("{}",VERSION);}
}

Const常量

使用const关键字声明的称为常量,常量不允许用mut关键字修饰
语法

fn main() {const VERSION: & str = "const var";println!("{}",VERSION);
}

特点

  1. const声明常量不具备模式匹配功能。
  2. 同样必须声明时初始化。
  3. 编译器并不一定会给const声明常量分配内存。(在Rust中,const声明的常量是编译时常量(compile-time constants)。与变量不同,常量的值在编译期间就已知,而不是在运行时分配内存来存储常量的值,并且被直接嵌入到生成的二进制文件中。因此,对于常量,编译器通常不需要为其分配内存。)

总结

  1. 声明变量/常量需要使用关键字let,const,static
  2. 如果声明的变量需要修改要加上mut关键字。
  3. 对于letstatic声明的变量可以使用模式解构。
  4. 变量在使用前必须初始化否则会报错。
  5. 常量和静态变量都需要在声明时初始化切值不能为表达式和函数调用。

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

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

相关文章

PSINS工具箱笔记——SINS/GNSS的例程

如图,三个不同维数的SINS/GPS的融合,153表示状态量15维、观测量3维,以此类推。 15维包括:失准角(3)速度误差(3)位置误差(3)陀螺漂移(3&#xff…

FL Studio20官方中文国内版升级下载2024最新

FL Studio 20,也被众多音乐制作人亲切地称为“水果20”,是一款功能强大的音乐制作软件,它在音乐创作、编曲、录音、混音以及后期制作等方面都有着出色的表现。这款软件不仅适用于专业的音乐制作人,也对初学者非常友好,…

【CSS】关于文字的换行问题

给固定宽度的div中写入一些文字&#xff0c;你会发现文字可能会超出&#xff0c;实例如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&qu…

【QT】重载的信号槽/槽函数做lambda表达式

重载的信号槽 函数指针&#xff1a; int fun(int a,long b) int (*funp)(int, long) fun; 实现回调函数就需要函数指针 信号重载 派生类槽函数发送两个信号 派生类给父类发两个信号 void (SubWidget::*mysigsub)() &SubWidget::sigSub;connect(&subw,mysigsub,t…

Linux命令高效的4个shell替代工具

文章目录 前言1.Top1.1 htop1.2 btop1.3 glances 2.df2.1 duf 3.ls3.1 eza 4.cat4.1 bat 前言 Unix系统发展了好多年了&#xff0c;不论是各开源发行版的linux还是封闭商业化的MacOS&#xff0c;上古流传的古董命令依旧在终端发挥着重要作用&#xff0c;但其实使用体验感觉还是…

2024年Android开发进阶课程,面试一路绿灯Offer拿到手软

职业生涯规划 Android系统的市场地位 Android程序开发的技能成长经验 Android程序员为什么需要学习Html5 Android软件工程师为什么不会被前端替代 为什么小程序无法替代原生开发 为什么Html5无法取代NativeAPP Html5在Android中的应用场景 如何成为一名合格的高级Android程序员…

C及C++每日练习(1)

一.选择&#xff1a; 1.以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A.是无限循环 B.循环次数不定 C.4次 D.3次 对于循环&#xff0c;其组成部分可以四个部分&#xff1a; for(初始化;循环进行条件;调整) …

【QA-SYSTEMS】CANTATA-解决Jenkins中build Cantata报错

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决Jenkins中build Cantata测试项目报找不到license server的错误。 2、 问题场景 在Jenkins中build Cantata测试项目&#xff0c;报错“Failed to figure out the license server correctly”。 3、软硬件环…

Numpy教程

文章目录 数组基础文件与字符串多项式分布实战 Numpy绝对可以说是支撑Python地位的最重要的包了&#xff0c;几乎所有能叫出名的Python计算库&#xff0c;都不可避免地调用了Numpy&#xff0c;Numpy官网也列出了一些&#xff0c;大致如下图这样&#xff0c;在科学计算领域&…

Spring事务管理与模板对象

1.事务管理 1.事务回顾 事务指数据库中多个操作合并在一起形成的操作序列 事务的作用 当数据库操作序列中个别操作失败时&#xff0c;提供一种方式使数据库状态恢复到正常状态&#xff08;A&#xff09;&#xff0c;保障数据库即使在异常状态下仍能保持数据一致性&#xff…

android开发教程百度网盘,高并发系统基础篇

展望未来 操作系统 移动操作系统的演变过程&#xff0c;从按键交互的塞班功能机到触摸屏交互的Android/IOS智能机&#xff0c;从小屏幕手机到全面屏、刘海屏、水滴屏。任何系统无非干两件事&#xff1a;输入和输出&#xff0c;接收到外部输入信号后经过操作系统处理后输出信息…

史称GPT-4最强劲敌——Claude 3 大模型它来了【附体验教程】

Anthropic 的 Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用。 Amazon Bedrock 是目前 第一个 也是 唯一 一个提供 Claude 3 Sonnet 的托管服务 。 Claude 3 免费测试体验者福利&#x1f9e7;&#xff1a;https://mp.weixin.qq.com/s/hszLRa8B5zKsTDg2bmI…

Java两周半速成之路(第七天)

一.多态 3.多态的好处: 提高了程序的维护性(由继承保证) 提高了程序的扩展性(由多态保证) 演示&#xff1a; package com.shujia.day08;public class Animal {String name;int age;public Animal() {}public Animal(String name, int age) {this.name name;this.age age…

安装/升级 gcc

文章目录 查看当前 gcc 版本查看 yum 软件库 gcc 版本列表下载最新版本安装 查看当前 gcc 版本 查看 yum 软件库 gcc 版本列表 只有一个4.8的版本&#xff0c;过旧 下载最新版本 wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz 安装 ./configure 报错 提示…

2024年Android开发者跳槽指南,超强Android进阶路线知识图谱

一、概述 随着业务的发展&#xff0c;工程的逐渐增大与开发人员增多&#xff0c;很多工程都走向了模块化、组件化、插件化道路&#xff0c;来方便大家的合作开发与降低业务之间的耦合度。现在就和大家谈谈模块化的交互问题&#xff0c;首先看下模块化的几个优势。 模块化的优…

国创证券|645元克!买还是不买?

近日世界金价继续走强。截至记者发稿&#xff0c;纽约商业交易所&#xff08;COMEX&#xff09;黄金主力4月合约突破2100美元/盎司关口&#xff1b;国内方面&#xff0c;SHFE黄金主力合约则摸高498元/克&#xff0c;迫临500元/克的关口。 巨丰投顾高级出资参谋游晓刚对《证券日…

替代TPS7B7701QPWPRQ1/TPS7B7702QPWPRQ1单/双通道 车规级LDO

PC8803具有高输入电压单低压差调节器&#xff08;PC8803SC01/PC8803SCO3&#xff09;/双通道低压差调节&#xff08;PC8803SC02/PC8803SC04&#xff09;&#xff0c;具有精确的电流感测&#xff0c;设计用于在宽输入电压范围内工作 从4.5V到40V。该设备具有45V负载转储电源输入…

微信小程序触屏事件_上划下划事件

一、微信小程序触屏事件 bindtouchstart&#xff1a;手指触摸动作开始 bindtouchmove&#xff1a;手指触摸后移动 bindend&#xff1a;手指触摸动作结束 属性类型说明touchesArray触摸事件&#xff0c;当前停留在屏幕中的触摸点信息的数组 Touch 对象 属性类型说明identi…

pgvector docker部署测试

docker pull pgvector/pgvector:pg16 运行 docker run --name pgvector --restartalways -e POSTGRES_USERpgvector -e POSTGRES_PASSWORDpgvector -v /srv/tlw/pgvectordata:/var/lib/postgresql/data -p 54333:5432 -d pgvector/pgvector:pg16 CREATE EXTENSION vector; --…

总结:大模型技术栈---算法与原理

原文地址&#xff1a;大模型技术栈-算法与原理 1. tokenizer方法 word-level char-level subword-level BPE WordPiece UniLM SentencePiece ByteBPE2. position encoding 绝对位置编码 ROPE AliBi 相对位置编码 Transformer-XL T5/TUPE DeBERTa3. 注意力机制 Mamba,H3,Hyena…