exercises/01_variables
variables1.rs - 变量声明与初始化
问题代码
fn main() {
x = 5;
println!("x has the value {x}");
}
解题要点
- 错误原因: 缺少
let 关键字声明变量,Rust 中变量使用前必须先声明
- 解决方法: 使用
let x = 5; 声明并初始化变量
正确写法
fn main() {
let x = 5;
println!("x has the value {x}");
}
variables2.rs - 变量使用前必须初始化
问题代码
fn main() {
let x;
if x == 10 {
println!("x is ten!");
} else {
println!("x is not ten!");
}
}
解题要点
- 错误: 变量未初始化就使用
- 解决: 给变量赋初值
let x = 10;
正确写法
fn main() {
let x = 10;
if x == 10 {
println!("x is ten!");
} else {
println!("x is not ten!");
}
}
variables3.rs - 类型注解与未初始化变量
问题代码
fn main() {
let x: i32;
println!("Number {x}");
}
解题要点
- 错误: 有类型注解但未初始化
- 解决: 类型注解同时初始化
let x: i32 = 42;
正确写法
fn main() {
let x: i32 = 42;
println!("Number {x}");
}
variables4.rs - 变量不可变性
问题代码
fn main() {
let x = 3;
println!("Number {x}");
x = 5;
println!("Number {x}");
}
解题要点
- 错误: 尝试修改不可变变量
- 解决: 使用
mut 关键字声明可变变量 let mut x = 3;
正确写法
fn main() {
let mut x = 3;
println!("Number {x}");
x = 5;
println!("Number {x}");
}
variables5.rs - 变量遮蔽
问题代码
fn main() {
let number = "T-H-R-E-E";
println!("Spell a number: {number}");
number = 3;
println!("Number plus two is: {}", number + 2);
}
解题要点
- 错误: 尝试修改不可变变量且改变类型
- 解决: 使用变量遮蔽
let number = 3;
正确写法
fn main() {
let number = "T-H-R-E-E";
println!("Spell a number: {number}");
let number = 3;
println!("Number plus two is: {}", number + 2);
}
variables6.rs - 常量声明
问题代码
const NUMBER = 3;
fn main() {
println!("Number: {NUMBER}");
}
解题要点
- 错误: 常量缺少类型注解
- 解决: 为常量添加类型注解
const NUMBER: i32 = 3;
正确写法
const NUMBER: i32 = 3;
fn main() {
println!("Number: {NUMBER}");
}
知识点汇总
变量基础
- 变量声明: 使用
let 关键字声明变量,如 let x = 5;
- 变量初始化: Rust 中变量使用前必须初始化,禁止使用未初始化变量
- 类型注解: 使用
let x: i32 = 42; 显式指定变量类型,帮助编译器推断
变量特性
- 变量不可变性: 变量默认不可变,使用
mut 关键字声明可变变量 let mut x = 3;
- 变量遮蔽: 使用相同变量名声明新变量,可以改变类型
let number = 3;
- 作用域: 新变量在新的作用域中生效,遮蔽之前的同名变量
常量
- 常量声明: 使用
const 声明常量,如 const NUMBER: i32 = 3;
- 常量特性: 必须指定类型,编译时确定值,永远不能修改
- 命名约定: 通常使用全大写字母和下划线