作用域和遮蔽
变量绑定有作用域,它们被限制在一个代码块中生存。代码块是由花括号 {}
包围的一系列语句。
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); }