作用域和遮蔽
变量绑定有作用域,它们被限制在一个代码块中生存。代码块是由花括号 {} 包围的一系列语句。
fn main() {
// 这个绑定存在于 main 函数中
let long_lived_binding = 1;
// 这是一个代码块,它的作用域比 main 函数小
{
// 这个绑定只存在于此代码块中
let short_lived_binding = 2;
println!("内部 short:{}", short_lived_binding);
}
// 代码块结束
// 错误!`short_lived_binding` 在此作用域中不存在
println!("外部 short:{}", short_lived_binding);
// 修复:^ 注释掉此行
println!("外部 long:{}", long_lived_binding);
}
此外,Rust 允许变量遮蔽。
fn main() {
let shadowed_binding = 1;
{
println!("被遮蔽前:{}", shadowed_binding);
// 这个绑定*遮蔽*了外部的绑定
let shadowed_binding = "abc";
println!("内部代码块中被遮蔽:{}", shadowed_binding);
}
println!("内部代码块外:{}", shadowed_binding);
// 这个绑定*遮蔽*了之前的绑定
let shadowed_binding = 2;
println!("外部代码块中被遮蔽:{}", shadowed_binding);
}