变量与可变性
在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