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