解构
结构体、枚举与元组
解构 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 4 节课。
什么是解构?
解构使用模式将复合值拆分为各个组成部分。它适用于元组、结构体、枚举、数组等类型。
解构元组
在一条 let 语句中,将元组的每个元素绑定到各自的变量。
fn main() {
let point = (3, 7);
let (x, y) = point;
println!("x = {x}, y = {y}");
}忽略元组部分
使用 _ 跳过一个值,使用 .. 跳过多个值。
fn main() {
let data = (1, 2, 3, 4);
let (first, .., last) = data;
println!("{first} ... {last}");
}解构结构体
按名称从结构体中取出字段。绑定的变量名可以与字段名相同,也可以重新命名。
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 10, y: 20 };
let Point { x, y } = p;
println!("{x}, {y}");
}重命名字段
使用 field: new_name,将结构体字段绑定到不同的变量名。
struct Config {
width: u32,
height: u32,
}
fn main() {
let c = Config { width: 800, height: 600 };
let Config { width: w, height: h } = c;
println!("{w} x {h}");
}忽略结构体字段
.. 会忽略您不需要的其余字段。
struct User {
name: String,
age: u32,
active: bool,
}
fn main() {
let u = User { name: "Ada".into(), age: 36, active: true };
let User { name, .. } = u;
println!("{name}");
}解构枚举
在 match 中解构枚举变体,以提取其中的数据。
enum Event {
Click { x: i32, y: i32 },
Key(char),
}
fn main() {
let e = Event::Click { x: 5, y: 8 };
match e {
Event::Click { x, y } => println!("click at {x},{y}"),
Event::Key(c) => println!("key {c}"),
}
}在参数中解构
函数参数可以直接进行解构,这对元组和小型结构体非常方便。
fn distance((x1, y1): (f64, f64), (x2, y2): (f64, f64)) -> f64 {
((x2 - x1).powi(2) + (y2 - y1).powi(2)).sqrt()
}
fn main() {
println!("{}", distance((0.0, 0.0), (3.0, 4.0)));
}嵌套解构
模式可以自由嵌套,因此您可以一步深入结构内部。
struct Line {
start: (i32, i32),
end: (i32, i32),
}
fn main() {
let line = Line { start: (0, 0), end: (4, 5) };
let Line { start: (sx, sy), end: (ex, ey) } = line;
println!("from {sx},{sy} to {ex},{ey}");
}解构数组和切片
数组和切片都可以解构,还可以使用 .. 捕获中间部分。
fn main() {
let arr = [1, 2, 3, 4, 5];
let [first, .., last] = arr;
println!("first {first}, last {last}");
}在 for 循环中解构
解构同样适用于 for 循环,非常适合遍历成对的值。
fn main() {
let pairs = [("a", 1), ("b", 2), ("c", 3)];
for (label, value) in pairs {
println!("{label} = {value}");
}
}快速检查
解构结构体时,如何忽略其余字段?
回顾
您学习了解构:
- 拆分元组、结构体、枚举、数组和切片
- 使用
field: name重命名字段 - 使用
_和..忽略部分内容 - 在
let、match和函数参数中进行解构 - 嵌套模式可以深入提取数据
常见问题解答
「解构」课时是免费的吗?
是的 — 「解构」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 4 节课。
「解构」这节课中我会学到什么?
结构体、枚举与元组 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn Rust Coding 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「解构」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn Rust Coding 课中编写并运行代码吗?
能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。