====== 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'' 声明编译期常量