2. 变量与可变性
任务说明
本案例通过一个可运行的Rust程序,演示let声明不可变变量与let mut声明可变变量的核心区别。你将看到:不可变变量在绑定后尝试修改会触发编译错误,而可变变量可以正常修改。最终程序输出两种变量的使用结果,帮助你建立对Rust所有权体系中“不可变性”与“可变性”的直观认知。
核心概念与代码实现
在Rust中,变量默认是不可变的。使用let声明的变量一旦绑定值,就不能再被重新赋值;若需修改变量值,必须在声明时加上mut关键字。下面的代码定义了一个不可变变量和一个可变变量,并分别尝试修改它们——对不可变变量的修改被注释掉,因为该代码若取消注释将无法通过编译。
fn main() {
// 不可变变量:默认绑定后不可修改
let number = 5;
println!("不可变变量的值为: {}", number);
// 下面的代码如果取消注释,将导致编译错误:
// error[E0384]: cannot assign twice to immutable variable `number`
// number = 6;
// 可变变量:使用 mut 关键字声明,允许后续修改
let mut count = 0;
println!("可变变量初始值为: {}", count);
count = count + 1;
println!("修改后可变变量的值为: {}", count);
// 演示不可变变量仍可被读取使用
let sum = number + count;
println!("两个变量之和为: {}", sum);
}
代码说明
上述程序首先声明了不可变变量number并绑定值5,随后通过println!输出其值。注释部分展示了尝试对不可变变量二次赋值会产生的编译错误信息(错误码E0384),这是Rust编译器在编译阶段就会拦截的违规操作。接着声明了可变变量count,初始值为0,通过count = count + 1将其修改为1并输出。最后将两个变量相加得到sum并打印,证明不可变变量虽然不能修改,但可以正常参与读取和计算。
编译与运行
将上述代码保存为main.rs,在终端执行以下命令:
rustc main.rs
./main
如果使用Cargo管理项目,也可以在项目目录下运行cargo run。
验证方法与判定标准
1. 编译通过验证:程序应无错误地编译并运行,输出以下三行内容(顺序一致):
不可变变量的值为: 5
可变变量初始值为: 0
修改后可变变量的值为: 1
两个变量之和为: 6
2. 不可变性验证:将代码中注释的number = 6;取消注释,重新执行rustc main.rs。此时编译必须失败,并显示错误信息cannot assign twice to immutable variable,错误码为E0384。这一步骤用于确认不可变变量确实无法被二次赋值。
3. 可变性验证:确认count变量在声明为mut后可以成功修改,且修改后的值(1)被正确输出。
预期输出
编译并运行成功后,终端将显示:
不可变变量的值为: 5
可变变量初始值为: 0
修改后可变变量的值为: 1
两个变量之和为: 6
以上输出由代码逻辑直接确定:number保持5,count从0变为1,两者之和为6。若取消注释不可变变量的赋值语句,编译将失败并报错,这正是验证不可变性的关键步骤。