03_变量与值可变性
rust定义变量
概要
变量 & 可变性
Variables & Mutability
- 声明变量 let some_number = 1; 默认:变量是不可变的
- 声明可变变量 let mut another_number = 2;
常量
Constants
- 声明常量
const SPECIAL_NUMBER: i32 = 3;
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3; - 使用 const 声明
- 不可以使用 mut
- 必须标注类型
- 可在任意作用域声明
- 仅可以使用常量表达式赋值
变量遮蔽
Shadowing
let my_number = 1;
let my_number = 2;
- 可以用与之前变量相同的名字声明一个新变量:第一个变量被第二个变量 “遮蔽” 了(shadowed)
- 就是创建了一个新的变量,只不过名字相同
详细
-
let关键字
用于声明变量:let (mut) 变量名 -
变量值是否改变
默认变量值不可变(Immutable),在声明变量时加上mut才为可变变量。
let x = 5;
x = 6;
let mut y = 6;
y = 8;
let mut y: u32 = 9;
第二行编译报错,上边变量声明时未标注类型的,默认是i32类型。
rust定义常量
常量(constant),常量在绑定值以后一直不再可变。使用const声明。
程序运行期间,常量在声明作用域内一直有效。
常量与不可变变量的区别
常量不可用mut,且永远不可变
常量声明使用const,且类型必须被标注
常量可在任何作用域内声明,包括全局作用域
常量声明时只可赋值(绑定)为常量表达式,等号右侧不能是函数调用,也不能是运行时才能计算出的值
常量命名规范:Rust里常量使用全大写字母,每个单词之间用下划线分开。
如:
const MAX_NUM: u32 = 100_000;
Shadowing(隐藏)
可用相同名字声明新的变量,新的变量会shadow(隐藏)之前声明的同名变量。
如:()
let x = 5;
let x = x + 1;
let y = x;
let x = "9";
前后x是两个变量,第二行的x隐藏了第一行的x变量,第三行的x是第二行的x=6。
shadow和mut的区别
若不用let,重新给非mut变量赋值报错
使用let声明同名变量,也是不可变的
使用let声明同名新变量,类型可与上一个不同
let s = "test"; // s是str类型
let s = s.len(); // s为usize类型了
let mut t = "test";
t = t.len(); // 编译报错
浙公网安备 33010602011771号