1 创建变量
fn 变量绑定() {
let num_0 = 10; // 定义为不可变
let mut num_1 = 20; // 定义为可变
let _num_2 = 30; //_ 忽略没有使用过的变量
static num_3: i32 = 40; // 创建静态变量
const num_4: i64 = 50; // 创建const变量
println!("num_0 = {}", num_0);
println!("num_1 = {}", num_1);
println!("num_2 = {}", _num_2);
println!("num_3 = {}", num_3);
println!("num_4 = {}", num_4);
}
fn main() {
变量绑定();
}
- 不可变变量 let num_0 = 10; 使用这种方法创建的变量默认不可变
特性:
• 绑定值后不可修改,若尝试修改会触发编译错误。
• 支持通过遮蔽(shadowing)重新绑定新值或改变类型(如`let num_0 = "text";`)。
• 用途:适用于数据无需修改的场景,如配置参数或中间计算结果。
2.可变变量 let mut num_1 = 20;
特性:
• 允许后续修改值,但**类型不可变**(如不能从`i32`改为字符串)。
• 相比遮蔽(shadowing),`mut`更明确表示“值可变”而非“重新定义新变量”。
• 用途:适用于需要频繁更新的数据,如循环计数器或状态管理。
3. 忽略未使用变量 let _num_2 = 30;
特性:
• 避免编译器对未使用变量的警告(Rust默认会警告未使用的变量)。
• 与未加下划线的变量不同,`_`前缀明确告知编译器“此变量可能暂时不用”。
• 用途:常用于占位符或未来可能使用的临时变量。
4. 静态变量 static num_3: i32 = 40;
特性:
• 全局生命周期(`'static`),内存地址固定,程序运行期间有效。
• 默认不可变,若需可变需添加`mut`并使用`unsafe`块操作(如`static mut`)。
• 与常量的区别:静态变量有固定内存地址,而常量可能被内联替换。
• 用途:全局共享数据(如配置表),但需谨慎处理并发安全问题。
5. 常量 const num_4: i64 = 50;
特性:
• 编译时确定值,不允许运行时计算或函数返回值。
• 不可遮蔽(shadowing)或重新绑定,且命名规范要求全大写(如`MAX_VALUE`)。
• 与静态变量的区别:常量无固定内存地址,直接内联到使用处。
• 用途:定义全局不可变值(如数学常数π或超时阈值)。
类型 | 可变性 | 作用域 | 生命周期 | 典型场景 |
---|---|---|---|---|
不可变变量 | ❌ | 块级 | 作用域内 | 临时计算、配置参数 |
可变变量 | ✅ | 块级 | 作用域内 | 状态更新、循环计数器 |
静态变量 | ❌/✅ | 全局 | 程序生命周期 | 全局共享数据 |
常量 | ❌ | 全局/块级 | 编译时替换 | 数学常数、固定配置 |
忽略变量 | - | 块级 | 作用域内 | 占位符、临时变量 |