005 Rust变量与常量
变量
rust中使用let
关键字定义变量,默认情况下,Rust 中的变量是不可变的,除非使用 mut
(mutable)关键字声明为可变变量,变量命名通常所有字母小写,单词之间用下划线“_”连接,如file_version。
rust是强类型语言,但具有自动类型推断的能力。建议声明变量明确变量类型。
let a:i32 = 123; // 不可变变量
// a = 12; // 错误的,不能给a赋值
let b = 456; // 自动类型推断为i32类型
let mut c:i32 = 10; // 使用mut声明c为可变变量
c = 789; // 可以赋值
在rust中可以重复声明相同名称的变量,这种叫变量遮蔽(shadowing),如下:
let x = 5;
let x = 8; // 这里的x遮蔽或叫覆盖了第一个变量x
可以用与之前变量相同的名字声明一个新变量:第一个变量被第二个变量遮蔽了(shadowed)。
就是创建了一个新变量,只不过名字相同。
常量(Constants)
在rust中声明常量,使用const
关键字。常量名通常为字母大写。
const VAR1:i32 = 3;
const VAR2:i32 = 5*2;
- 常量不可以使用
mut
关键字。 - 必须标注类型。
- 可在任意作用域声明。
- 仅可以使用常量表达式赋值。
常量与不可变变量的区别
既然不可变变量是不可变的,那不就是常量吗?为什么叫变量?
变量和常量还是有区别的。在 Rust 中,以下程序是合法的:
let a = 123; // 可以编译,但可能有警告,因为该变量没有被使用
let a = 456;
但是如果 a 是常量就不合法:
const a: u64 = 123;
let a = 456;
这里声明了 a 为无符号 64 位整型变量,如果没有声明类型,a 将自动被判断为有符号 32 位整型变量,这对于 a 的取值范围有很大的影响。