首页 > 编程语言 >(七)Rust 通用的编程概念

(七)Rust 通用的编程概念

时间:2024-03-30 19:32:29浏览次数:26  
标签:通用 变量 编程 元组 数组 类型 Rust 常量

变量与可变性

在Rust语言中,声明变量是使用 let 关键字,而且变量默认是不可改变的, 一旦值被绑定在一个名称上, 就不能给这个变量重新赋值,如果重新赋值的话,就会在编译的时候报错。这是Rust提供给我们的众多优势之一, 让我们可以充分利用Rust提供的安全性和简单并发性来编写代码。

下面是一段代码的例子,可以看到,编译报错cannot assign twice to immutable variable,意思是不可以对不可变的变量两次赋值

如果想要这段代码编译通过,则需要把x声明成一个可变的变量,也就是在x前面加上mut关键字

在声明变量的时候,在变量名前面加上 mut 关键字,就可使这个变量成为一个可变的

(shadowing)隐藏

可以使用相同的名字声明新的变量,新的变量就会 shadow (隐藏)之前声明的同名变量

在后续的代码中,这个变量名代表的就是新的变量

shadow和把变量标记为 mut 是不一样的:

1.如果不使用 let 关键字,重新给非 mut 的变量赋值会导致编译错误

2.使用 let 声明的同名新变量,也是不可变的

3.使用 let 声明的同名新变量,它的类型可以与之前不同

常量

常量在绑定值以后是不可变的,但是它与不可变的变量有很多区别:

1.常量不可以使用 mut 关键字,常量是永远都不可变的

2.声明常量需要使用 const 关键字,它的类型必须被标注

3.常量可以在任何作用域内进行声明,包括全局作用域

4.常量只能绑定到常量表达式,无法绑定到函数的调用结果,也无法绑定到只能在运算时才能计算出的值

5.在程序运行期间,常量在其声明的作用域内一直有效

6.命名规范:Rust里常量使用全大写,每个单词之间用下划线隔开,比如:MAX_NUMBER

数据类型

标量类型和复合类型

Rust是静态编译语言,在编译的时候必须知道所有变量的类型,基于使用的值,编译器通常能推断出它的具体类型,但如果可能的类型比较多,就必须添加类型的标注,不然编译会报错,比如把string类型转换为整数的parse方法:

标量类型

一个标量类型代表一个单个的值

Rust有四个主要的标量类型:

1.整数类型

整数类型没有小数部分,例如u32就是一个无符号的整数类型,占据32位的空间

无符号整数类型以u开头,数值是非负的

有符合整数类型以i开头,数值有正负之分

2.浮点类型

Rust有两种基础的浮点类型,也就是含有小数部分的类型

f32,32位,单精度

f64,64位,双精度

3.布尔类型

Rust的布尔类型有两个值:ture和false,占用一个字节大小,符号是 bool

4.字符类型

Rust语言中,char类型被用来描述语言中最基础的单个字符

字符类型的字面值使用单引号,占用4字节大小

复合类型

复合类型就是可以将多个值放在一个类型里

Rust提供了两种基础的复合类型:元组  和  数组

元组

元组可以将多个类型的多个值放在一个类型里

元组的长度是固定的,一旦声明就无法改变

创建元组:

在小括号里,将值用逗号分开

元组中的每个位置都对应一个类型,元组中各元素的类型不必相同

比如:

获取元组的元素值:

可以使用模式匹配来解构一个元组从而获取元素的值

比如:

访问元组的元素:

在元组变量使用点标记法,后接元素的索引号,就如:

数组

数组也可以将多个值放在一个类型里

数组里每个元素的类型必须相同

数组的长度也是固定的

声明数组:

在中括号中,各值用逗号分开

数组的用处:

如果想让你的数据存放在stack(栈)上,而不是heap(堆)上,或者想保证有固定数量的元素,这时使用数组更有好处

数组的类型:

数组的类型以这种形式表示:[类型;长度],例如:

另一种声明数组的方法:

假设数组的每个元素值都相同,那么可以在中括号里指定初始值,然后跟着一个“ ; ”,最后是数组 的长度,例如:

let a = [3; 5]; 其实就是相当于  let a = [3, 3, 3, 3, 3];

访问数组的元素:

数组是stack(栈)上分配的单个块的内存,可以使用索引来访问数组的元素

如果访问的索引超出了数组的范围,那么,可能它在编译的时候不会报错,但在运行的时候会报错

标签:通用,变量,编程,元组,数组,类型,Rust,常量
From: https://blog.csdn.net/lx4455123/article/details/137095122

相关文章

  • (八)Rust 函数和注释
    函数在Rust里,声明函数使用fn关键字,按照惯例,针对函数和变量名,Rust使用snakecase命名规范:所有的字母都是小写,单词之间使用下划线分开,例如:函数的参数定义函数时里边定义的参数,叫形参(parameters)调用函数时传递的具体参数,叫实参(arguments)在函数签名里,必须声明每个参数的类......
  • JAVA学习-网络编程.Java11标准化的HTTP Client
           Java11引入了标准化的HTTPClient,它提供了一种现代化、灵活且易于使用的方式来进行HTTP通信。下面是关于Java11标准化的HTTPClient的概述以及与其他比较和高级应用的说明:1.概述:       Java11标准化的HTTPClient是一种替代HttpURLConnection的新......
  • 【Lua硬件编程之】电机温度和振动4G远程监测
    【Lua硬件编程之】电机温度和振动4G远程监测1电机温度和振动监测介绍2温振传感器4G上云图示3代码实现讲解(基于FlexLuaDTU01采集器)4参考资料1电机温度和振动监测介绍可通过温振传感器测量电机表面的温度,电机三轴振动速度,电机的振动位移,通过这些物理量来感知电......
  • Rust简易入门(二)
    Rust内存管理模型"Stoptheworld'"是与垃圾回收(GarbageCollection)相关的术语,它指的是在进行垃圾回收时系统暂停程序的运行。这个术语主要用于描述一种全局性的暂停,即所有应用线程都被停止,以便垃圾回收器能够安全地进行工作。这种全局性的停止会导致一些潜在的问题,特别是对于......
  • Rust简易入门(三)
    Rust的流程控制主要包括条件语句(if、else、elseif)、循环语句(for、while)和跳转语句(break、continue、return)。这些语句使程序员能够根据特定的条件或循环执行代码块,从而实现各种复杂的逻辑控制。例如,if语句允许程序员根据条件执行代码,而for和while循环则用于重复执行代码块,直到满......
  • 【并发编程】线程的基础概念
    一、基础概念1.1进程与线程A什么是进程?进程是指运行中的程序。比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。什么线程?线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某个片段。举个栗子:房子与人比如现......
  • Rust简易入门(一)
    Rust!Rust!Rust!变量与不可变性在Rust中,变量使用let关键字进行声明Rust支持类型推导,也可以显示指定变量类型变量名采用蛇形命名法,枚举结构体采用帕斯卡命名法,没有使用的变量采用前置下划线_以消除警告强制类型转换关键词as打印变量println!("val:{}",x);print......
  • vivado 硬件器件编程
    硬件器件编程当编程文件与硬件器件相关联后,即可在“硬件(Hardware)”窗口中右键单击器件并选择“器件编程(ProgramDevice)”菜单项来执行硬件器件编程。您也可以使用program_hw_deviceTcl命令。例如,要对JTAG链中的首个器件执行编程,请使用以下Tcl......
  • 语法回顾-《Verilog编程艺术》之赋值操作
    目录Verilog赋值操作连续赋值过程赋值参考《Verilog 编程艺术》魏家明著Verilog赋值操作1.连续赋值(Continuousassignment),用于对线网Nets的赋值2.过程赋值(Proceduralassignment),用于对变量variables的赋值3.过程连续赋值:assign/deassign和fork/realease赋值由两......
  • 语法回顾-《Verilog编程艺术》之表达式
    目录表达式操作符操作符优先级整数算数操作符比较操作符逻辑操作符位运算操作符归约操作符移位操作符条件操作符连接操作符操作数向量的抽取数组的访问字符串表达式位长符号表达式赋值和截断与x/z比较参考《Verilog 编程艺术》魏家明著表达式表达式是......