22 结构体与枚举之定义结构体

在上一篇教程中,我们深入探讨了 Rust 的所有权与借用之生命周期。理解了这些基础概念后,我们将继续探索 Rust 的数据结构特性。这一篇将专注于如何定义和使用 结构体,为实际编程提供了一种强大的数据组织方式。

什么是结构体?

在 Rust 中,结构体(struct) 是一种自定义数据类型,它可以将多个相关的值组合成一个单一的复合数据类型。结构体是 Rust 中处理数据的基本构建块之一,通常用于表示具有多种属性的实体。

基本结构体定义

以下是一个定义基本结构体的示例:

1
2
3
4
struct Person {
name: String,
age: u32,
}

在上述代码中,我们定义了一个名为 Person 的结构体,它包含两个字段:nameagename 是一个字符串类型,age 是一个无符号 32 位整数。

创建结构体实例

定义完结构体后,我们可以创建一个实例:

1
2
3
4
5
6
7
8
fn main() {
let person = Person {
name: String::from("Alice"),
age: 30,
};

println!("Name: {}, Age: {}", person.name, person.age);
}

在上面的示例中,我们创建了一个 Person 类型的实例,并用 println! 宏打印出其字段的值。

结构体的方法

在 Rust 中,我们可以为结构体定义方法。通常,我们会使用 impl 块来实现这些方法。

定义结构体的方法

下面是如何为 Person 定义一个方法来获取完整的信息:

1
2
3
4
5
impl Person {
fn info(&self) -> String {
format!("{} is {} years old.", self.name, self.age)
}
}

这里的 info 方法使用了 &self,表示它是一个对实例的引用。这意味着我们可以在调用这个方法时不需要转移所有权。

使用结构体的方法

我们可以这样调用定义的方法:

1
2
3
4
5
6
7
8
fn main() {
let person = Person {
name: String::from("Alice"),
age: 30,
};

println!("{}", person.info());
}

结构体的变体

Rust 中的结构体不仅限于简单的定义。你可以使用 元组结构体单元结构体 来创建更灵活的数据结构。

元组结构体

元组结构体类似于普通结构体,但不需要命名字段。它们使用位置来访问值。

1
2
3
4
5
6
struct Color(u32, u32, u32);

fn main() {
let black = Color(0, 0, 0);
println!("Black RGB: ({}, {}, {})", black.0, black.1, black.2);
}

这段代码定义了一个名为 Color 的元组结构体,其中包含三个无符号整数,用于表示 RGB 色值。

单元结构体

单元结构体不包含任何字段,通常用于标识某种状态或实现 trait。

1
2
3
4
5
struct Marker;

fn main() {
let _m = Marker; // 创建一个单元结构体实例
}

小结

在这一篇中,我们学习了如何在 Rust 中定义结构体。我们讨论了基本结构体的创建、实例化以及方法的定义和使用。通过这些内容,我们可以更好地对数据进行组织和操作。

接下来的教程中,我们将继续探索 Rust 的强大特性,具体地讨论如何定义 枚举。枚举为我们提供了另一种强类型的数据封装方式,使得我们可以利用 Rust 的类型系统来构建更复杂的应用程序。请继续关注!

22 结构体与枚举之定义结构体

https://zglg.work/rust-lang-zero/22/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论