目录

Hello World 与变量绑定

第一个 Rust 程序

创建一个新项目:

cargo new hello_world
cd hello_world

打开 src/main.rs,编写代码:

fn main() {
    println!("Hello, World!");
}

运行:

cargo run

代码解读

变量绑定 let

Rust 使用 let 声明变量绑定:

fn main() {
    let x = 5;
    println!("x = {}", x);
}

{} 是占位符,Rust 会自动推断类型并打印值。

不可变性

变量默认不可变。尝试修改会编译错误:

let x = 5;
x = 6; // 编译错误:不能给不可变变量赋值

错误信息:

error[E0384]: cannot assign twice to immutable variable `x`

可变性 mut

使用 mut 关键字使变量可变:

let mut x = 5;
println!("x = {}", x);
x = 6;
println!("x = {}", x);

类型注解

Rust 是静态类型语言,但支持类型推断。你也可以显式标注类型:

let x: i32 = 5;       // 32位有符号整数
let y: f64 = 3.14;    // 64位浮点数
let z: bool = true;   // 布尔值
let c: char = 'A';    // 字符

变量的作用域

变量在花括号 {} 范围内有效:

fn main() {
    let x = 1;
    {
        let y = 2;
        println!("内部: x={}, y={}", x, y); // 可以访问 x 和 y
    }
    // println!("y = {}", y); // 编译错误:y 不在作用域内
}

变量遮蔽(Shadowing)

在同一作用域中,可以用同名变量遮蔽之前的变量:

fn main() {
    let x = 5;
    let x = x + 1;      // 遮蔽,x 变成 6
    {
        let x = "文本"; // 内部作用域遮蔽,类型也可以改变
        println!("内部: {}", x); // 打印 "文本"
    }
    println!("外部: {}", x);     // 打印 6
}

变量遮蔽与 mut 的区别:

常量 const

常量用 const 声明,必须在声明时初始化,类型不可省略:

const MAX_POINTS: u32 = 100_000;
const PI: f64 = 3.1415926;

常量和变量的区别:

本章实践

fn main() {
    let name = "小明";
    let mut age: u8 = 25;
    println!("我叫{},今年{}岁", name, age);
 
    age = 26;
    println!("明年我{}岁", age);
 
    const BIRTH_YEAR: u16 = 2000;
    println!("我出生于{}年", BIRTH_YEAR);
}

本章小结