变量
可变性
变量绑定默认是不可变的,但可以使用 mut
修饰符来覆盖。
// 默认不可变
let a = 1;
// 错误!无法给不可变变量赋新值
a += 1;
// 可变变量
let mut b = 1;
// OK
b += 1;
作用域
变量绑定有一个作用域,它们的生命周期限制在它们被赋值、被绑定所处的的 block(块) 中。
fn main() {
// 这个绑定存在于 main 函数中
let long_lived_binding = 1;
// 这是一个块,比 main 函数的作用域更小
{
// 这个绑定只存在于这个块中
let short_lived_binding = 2;
println!("inner short: {}", short_lived_binding);
}
// 块结束
// 错误!`short_lived_binding` 在这个作用域中不存在
println!("outer short: {}", short_lived_binding);
// OK
println!("outer long: {}", long_lived_binding);
}
遮蔽
Rust 允许变量遮蔽
(Variable shadowing)。
fn main() {
let a = 1;
{
println!("before being shadowed: {}", a); // 在被遮蔽之前: 1
// 这个绑定 *遮蔽* 外部的绑定
let a = "abc";
println!("shadowed in inner block: {}", a); // 在内部块中被遮蔽: abc
}
println!("outside inner block: {}", a); // 在内部块外: 1
// 这个绑定 *遮蔽* 了前面的绑定
let a = 2;
println!("shadowed in outer block: {}", a); // 在外部块中被遮蔽: 2
}
代码挑战
尝试修改编辑器中提供的代码以修复
is_palindrome
函数。
Loading...
> 此处输出代码运行结果