第五回:大清律例,变量与可变性
在其他语言(C/JS)里,变量就像方唐镜,想怎么变就怎么变。但在 Rust 里,默认情况下的变量就像刻在石头上的律法,是不可变 (Immutable) 的。
1. 不可变变量 (铁律)
fn main() {
let x = 5;
println!("x 的值是: {}", x);
// x = 6; // 报错!试图修改不可变变量,会被拖出去打五十大板!
}
如果你非要改,就得加上 mut 关键字,这叫“申请修法”。
2. 可变变量 (变通)
加上 mut (mutable) 后,变量就可以修改了。
fn main() {
let mut x = 5; // 允许修改
println!("x 的值是: {}", x);
x = 6; // 这次没问题!
println!("x 变身后的值是: {}", x);
}
3. 变量遮蔽 (移形换影)
Rust 有一招绝学叫 Shadowing (遮蔽)。你可以重复定义同名变量,新的会盖住旧的。
fn main() {
let x = 5;
let x = x + 1; // 这是一个全新的 x,盖住了之前的
let x = x * 2; // 又来一个 x
println!("x 最后变成了: {}", x); // 12
}
这就像方唐镜换了身衣服(类型变了),虽然人名还叫方唐镜,但已经不是刚才那个了!
常量 (const) 也是不可变的,那它跟变量有什么区别?
常量是祖宗家法!必须注明类型,而且永远不能改,连 mut 都不行!
4. 常量 (祖宗家法)
const MAX_POINTS: u32 = 100_000;
动手时刻:让方唐镜改口
下面的代码会报错,请加上那个神奇的关键字,让方唐镜能改口供:
fn main() {
let testimony = "我没打人";
testimony = "我打了,怎么样?"; // 报错
println!("{}", testimony);
}
查看锦囊妙计
把 let testimony 改成 let mut testimony。