0Pricing
Learn Rust Coding · 课时

定义和使用结构体

使用结构体创建自定义数据结构,包括元组结构体和类单元结构体,以组合相关数据。

定义和使用结构体 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 3 节课。

认识结构体:自定义数据类型

在 Rust 中,结构体(structure 的简称)是一种创建自定义数据类型的方式,可以为多个相关值命名,并将它们组合成一个有意义的整体。

您可以把结构体想象成用户、颜色或空间中某个点的蓝图。与其为用户的姓名、电子邮件和年龄分别创建变量,不如将它们全部放入 User 结构体中。

这样可以帮助您有条理地组织数据,也让代码更易于阅读和维护。

定义经典结构体

最常见的结构体类型是经典结构体,其中每份数据都有名称,这些数据称为字段。定义方式如下:

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    // This code only defines the struct blueprint.
    // No actual user has been created yet!
    println!("Struct 'User' blueprint defined.");
}

创建结构体实例

定义结构体后,您可以创建它的具体实例。每个实例都会为其字段保存特定的值。创建实例时,需要为每个字段指定具体值。

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    println!("User instance created!");
}

访问结构体字段

要从结构体实例中获取数据,可以使用点号表示法。只需输入实例名称、一个点号(.),然后输入字段名称即可。

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    println!("User's username: {}", user1.username);
    println!("User's email: {}", user1.email);
}

结构体的可变性

与普通变量一样,整个结构体实例也可以使用 mut 关键字声明为可变。如果实例是可变的,所有字段都可以修改。

您不能只让某些字段可变;可变性会应用于整个结构体实例。

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    
    println!("Old email: {}", user1.email);
    user1.email = String::from("new_alice@example.com");
    println!("New email: {}", user1.email);
}

元组结构体:未命名字段

元组结构体是结构体的另一种形式,外观类似元组,但拥有名称。当您希望为元组指定独特的类型名称,却不需要为各个字段命名时,元组结构体非常有用。

例如,Color(i32, i32, i32) 是一个命名元组,将三个整数组合在一起。

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);
    println!("Tuple structs 'Color' and 'Point' defined.");
}

使用元组结构体

创建元组结构体实例的方式类似于创建普通元组。要访问其中的值,可以使用带有索引的点号表示法,索引从 0 开始。

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);

    println!("Black color: R={}, G={}, B={}", black.0, black.1, black.2);
    println!("Origin point: X={}, Y={}, Z={}", origin.0, origin.1, origin.2);
}

类单元结构体:标记

您还可以定义完全没有字段的结构体。这些结构体称为类单元结构体,因为它们的行为类似于单元类型 ()。

它们通常用作标记,以便为某种类型实现特定特征,此时数据本身并不重要。

struct AlwaysTrue;

fn main() {
    let subject = AlwaysTrue;
    // Unit-like structs don't store data directly,
    // but they can be instantiated and used as types.
    println!("Unit-like struct 'AlwaysTrue' created.");
}

结构体更新语法

如果您需要基于现有实例创建新的结构体实例,但只想修改部分字段的值,Rust 提供了方便的结构体更新语法(..)。

这种语法会移动指定实例中的其余字段,因此如果原实例包含实现了 Copy 的字段,原实例将无法再使用。

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    let user2 = User {
        email: String::from("bob@example.com"),
        username: String::from("bob456"),
        ..user1 // Copy remaining fields from user1
    };

    println!("User 2 email: {}", user2.email);
    println!("User 2 active: {}", user2.active);
    // user1.username is now moved, so user1 can't be used here.
}

结构体测验

测试您对 Rust 结构体的理解。

回顾:结构体概览

您已经学习了如何在 Rust 中定义和使用结构体!

  • 经典结构体将命名字段组合起来,创建自定义数据类型。
  • 元组结构体是带名称的元组,在不一定需要字段名称时非常有用。
  • 类单元结构体没有字段,充当标记。
  • 结构体实例可以声明为 mut,从而允许修改其中的字段。
  • .. 语法可以帮助您基于现有实例创建新实例。

结构体是 Rust 程序组织相关数据的基础,可以让代码结构更清晰、可读性更强。

常见问题解答

「定义和使用结构体」课时是免费的吗?

是的 — 「定义和使用结构体」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 3 节课。

「定义和使用结构体」这节课中我会学到什么?

使用结构体创建自定义数据结构,包括元组结构体和类单元结构体,以组合相关数据。 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn Rust Coding 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「定义和使用结构体」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn Rust Coding 课中编写并运行代码吗?

能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义和使用结构体
  2. 用于自定义类型的枚举
  3. 强大的模式匹配
← 返回 Learn Rust Coding