» Rust快速入门 » 1. 基础篇 » 1.5 变量

变量

可变性

变量绑定默认是不可变的,但可以使用 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...
> 此处输出代码运行结果
上页
下页