0Pricing
Learn Rust Coding · 课时

解构

结构体、枚举与元组

解构 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 深入理解 match
  2. if let 与 while let
  3. 使用 @ 进行绑定
  4. 解构
← 返回 Learn Rust Coding