Rust变量与可变性
Rust变量默认是不可变的!
会报错的!
声明一个变量
跟js(es6)一样可采用let声明一个变量。但是如果想让一个变量可变,则需要在let后面在加上一个mut关键字使得变量可变。
总结:
声明不可变变量:let x;
声明可变变量: let mut x;
声明一个常量
常量和变量还是有着些许不同的。let声明的实际上还是一个变量,那要声明一个常量怎么做呢?const x: 类型 = y;
即可声明一个常量x,常量在声明阶段就需要确定常量的类型!
注意:
- 常量只能绑定在常量表达式,而不能将函数返回的返回值或者其他运行时计算出的结果绑定到常量上。
- 常量可以声明在任何作用域上。
- 常量命名为全大写(规范),且以_分隔单词,数值也可以用_分隔!如100_000提高可读性。
隐藏变量
新声明的变量可以覆盖掉旧的同名变量,即第一个变量被第二个变量隐藏(shadow)了。如:
隐藏机制与mut的区别
- 隐藏机制不同于将一个变量声明为mut,因为如果不是使用let关键字的情况下重新为这个变量赋值,则会导致编译错误。通过使用let,我们可以对这个值执行一系列的变换操作,并运行这个变量在操作完成后保持自己的不可变性。
- 由于重复使用let关键字会创建出新的变量,所以我们可以在复用变量名称的同时改变它的类型。
数据类型
Rust存在两种数据类型的子集:标量类型(scalar)和复合类型(compound)。Rust是静态语言,即要求它在编译程序的过程中需要知道所有变量的具体类型。有些时候编译器无法推导出变量的类型,这时候就需要显示添加类型标注。
标量类型
标量类型是单个值类型的统称。Rust中内建了4种基础的标量类型:
- 整数
- 浮点数
- 布尔值
- 字符
整数类型
整数类型通过前缀i和u分别来区分有符号和无符号。
长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
arch | isize | usize |
有符号和无符号的选择
对于有符号的数值来说,需要有个数值来判断是否是正数,而无符号数则不需要,因此其表达正数的范围会比有符号更加大。