====== Hello World 与变量绑定 ====== ===== 第一个 Rust 程序 ===== 创建一个新项目: cargo new hello_world cd hello_world 打开 ''src/main.rs'',编写代码: fn main() { println!("Hello, World!"); } 运行: cargo run ===== 代码解读 ===== * ''fn'' 关键字声明函数 * ''main()'' 是程序的入口函数 * ''println!'' 是宏(带感叹号),用于打印文本 * 字符串用双引号包裹 * 语句以分号结尾 ===== 变量绑定 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'' 的区别: * ''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); } ===== 本章小结 ===== * ''let'' 声明变量,默认不可变 * ''mut'' 使变量可变 * Rust 有类型推断,也可显式标注类型 * 变量有作用域,支持遮蔽 * ''const'' 声明编译期常量