🚀 Rust 基础 5:Rust 中的结构体和枚举

欢迎回来。这是我们 7 篇 Rust 教程中的第 5 篇。

结构体和枚举是 Rust 中用于组织和表示数据的基本工具。它们使您的代码更具可读性、效率和表现力。

**步骤 1:什么是结构?**

结构就像是创建将相关信息组合在一起的自定义数据类型的蓝图。

**示例:** Person 结构体

以下是定义和使用结构的方法:

struct Person {
    name: String,
    age: u8, // u8 means an unsigned 8-bit integer (0–255)
}

fn main() {
    // Create an instance of the Person struct
    let person = Person {
        name: String::from("Chisom"),
        age: 25,
    };

    // Access and print struct fields
    println!("Name: {}, Age: {}", person.name, person.age);
}

**解释**

**定义结构体:**

`struct Person` 定义结构。

它有两个字段:“name(字符串)”和“age(数字)”。

**创建实例:**

`Person { name: String::from("Chisom"), age: 25 }` 创建一个 Person 实例。

**访问字段:**

使用“person.name”和“person.age”访问数据。

**步骤 2:向结构体添加方法**

您可以向结构添加方法(函数)来对其数据执行操作。

**示例**:具有面积方法的矩形结构

struct Rectangle {
    width: u32,  // u32 means an unsigned 32-bit integer
    height: u32,
}

impl Rectangle {
    // Define a method to calculate area
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    println!("The area of the rectangle is: {}", rect.area());
}

**impl Rectangle:**实现 Rectangle 结构的方法。

fn area(&self):计算面积的方法。

&self 指的是正在使用的实例。

您使用 rect.area() 调用该方法。

**步骤 3:什么是枚举?**

枚举表示可以具有多个预定义变体之一的类型。可以将其视为描述“众多选项中的一件事”的一种方式。

**示例:方向枚举**

enum Direction {
    Up,
    Down,
    Left,
    Right,
}

fn main() {
    let movement = Direction::Up;

    match movement {
        Direction::Up => println!("Going up!"),
        Direction::Down => println!("Going down!"),
        Direction::Left => println!("Going left!"),
        Direction::Right => println!("Going right!"),
    }
}

**解释**

**定义枚举:**

枚举方向定义可能的方向:上、下、左、右。

使用 `match`:

`match` 检查使用了哪种变体并运行相应的代码。

“匹配”的每个分支对应枚举的一个变体。

**步骤 4:带有数据的枚举**

枚举还可以保存每个变体的数据。

**示例:消息枚举**

enum Message {
    Text(String),
    Number(i32),
}

fn main() {
    let msg = Message::Text(String::from("Hello"));

    match msg {
        Message::Text(text) => println!("Message: {}", text),
        Message::Number(num) => println!("Number: {}", num),
    }
}

**解释**:

消息的每个变体可以保存不同类型的数据(字符串或 i32)。

`match` 使用模式提取变体中的数据。

今日练习

**结构实践:**

例子:

struct Car {
    brand: String,
    model: String,
    year: u16,
}

fn main() {
    let car = Car {
        brand: String::from("Toyota"),
        model: String::from("Corolla"),
        year: 2020,
    };
    println!("{} {} ({})", car.brand, car.model, car.year);
}

**枚举实践:**

创建一个枚举 Weather,其变量包括 Sunny、Rainy 和 Cloudy。

使用 match 为每个变体打印适当的消息。

**例子:**

enum Weather {
    Sunny,
    Rainy,
    Cloudy,
}

fn main() {
    let today = Weather::Sunny;

    match today {
        Weather::Sunny => println!("It's a bright and sunny day!"),
        Weather::Rainy => println!("Don't forget your umbrella!"),
        Weather::Cloudy => println!("Looks like it might rain."),
    }
}

🎉 这就是 RUST BASICS 5 的全部内容!您已经学习了结构和枚举。在下一篇文章中,我们将学习 Rust 中的函数和错误处理。

欢迎在评论中分享你的解决方案或提问。祝你编码愉快!🦀

查看 Rust 文档了解更多详细信息。

如果有任何不清楚的地方请告诉我!

请让我知道这些例子的感受,以及您是否需要更多的练习或说明!