Skip to content

变量

Rust 中变量默认是不可改变的,当变量不可变时,一旦值被绑定一个名称上,你就不能改变这个值。示例:

rust
// 错误示例
fn main() {
    let x = 5;   // 变量默认不可变
    println!("The value of x is: {x}");
    x = 6;       // 改变变量值发生错误
    println!("The value of x is: {x}");
}

不过可变性也是非常有用的,可以用来更方便地编写代码。尽管变量默认是不可变的,你仍然可以在变量名前添加 mut 来使其可变。示例:

rust
fn main() {
    let mut x = 5;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

可以通过定义一个与之前变量同名的新变量“遮蔽”第一个变量。Rustacean 们称之为第一个变量被第二个 隐藏(Shadowing) 了,这意味着当您使用变量的名称时,编译器将看到第二个变量,直到第二个变量自己也被隐藏或第二个变量的作用域结束。可以用相同变量名称来隐藏一个变量,以及重复使用 let 关键字来多次隐藏,如下所示:

rust
fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }

    println!("The value of x is: {x}");
}

除了变量的命名声明之外,上面的代码还有Rust中输出的方式--Rust调用一个宏println!进行打印输出。

rust
#![allow(unused)]
fn main() {
    println!("Hello");                 // => "Hello"
    println!("Hello, {}!", "world");   // => "Hello, world!"
    println!("The number is {}", 1);   // => "The number is 1"
    println!("{:?}", (3, 4));          // => "(3, 4)"
    println!("{value}", value=4);      // => "4"
    println!("{} {}", 1, 2);           // => "1 2"
    println!("{:04}", 42);             // => "0042" with leading zeros
}

可以看到 println! 宏接受的是可变参数,第一个参数是一个字符串常量,它表示最终输出字符串的格式,包含其中形如 {} 的符号是占位符,会被 println! 后面的参数依次替换。

Rust 还有更多的格式化输出的宏,具体请参考print!, format!, eprint!, eprintln!