05-rust结构体-struct

在 Rust 中,结构体(struct)是定义数据类型和管理复杂数据的核心工具,类似于其他语言中的类,但它不支持内置继承。Rust 提供了三种基本的结构体形式:常规结构体(regular struct)、元组结构体(tuple struct)和单元结构体(unit struct)。下面详细讲解:


1. 常规结构体(Regular Struct)

带有命名字段的结构体,适用于需要清楚表示每个字段意义的场景。

定义

struct Color {
    red: i32,
    green: i32,
    blue: i32,
}

创建实例

let green = Color { red: 0, green: 255, blue: 0 };

访问字段

println!("Red: {}, Green: {}, Blue: {}", green.red, green.green, green.blue);

修改字段

常规结构体默认不可变,需要加 mut 来允许修改字段:

let mut color = Color { red: 0, green: 255, blue: 0 };
color.red = 128;
println!("New Red: {}", color.red);

2. 元组结构体(Tuple Struct)

元组结构体类似于元组,但有一个命名类型,用于分组多个值而不需要命名字段。

定义

struct Color(i32, i32, i32);

创建实例

let green = Color(0, 255, 0);

访问字段

通过索引访问字段:

println!("Red: {}, Green: {}, Blue: {}", green.0, green.1, green.2);

3. 单元结构体(Unit Struct)

不包含任何字段,通常用于标记或作为类型标签。

定义

struct UnitStruct;

创建实例

let unit = UnitStruct;

用途

  • 作为标记类型,表示某种状态或行为。
  • 用于泛型编程时的占位类型。

4. 实现方法和特性

实现方法分类定义和初始化/方法实现两种

方法实现

使用 impl 块可以为结构体实现方法(类似类中的成员函数)。

impl Color {
    fn new(red: i32, green: i32, blue: i32) -> Self {
        Self { red, green, blue }
    }

    fn display(&self) {
        println!("Red: {}, Green: {}, Blue: {}", self.red, self.green, self.blue);
    }
}

示例

let green = Color::new(0, 255, 0);
green.display();

5. 自动派生特性

通过 #[derive] 注解可以为结构体自动实现常用的特性,例如 DebugClonePartialEq 等。
debug:打印输出。clone:支持克隆。artialEq 和 Eq:支持比较。

#[derive(Debug, Clone, PartialEq)]
struct Color {
    red: i32,
    green: i32,
    blue: i32,
}

fn main() {
    let color = Color { red: 0, green: 255, blue: 0 };
    println!("{:?}", color); // Debug 输出
}

6.特殊结构体用法

常量与静态生命周期

可以为结构体的字段提供常量值或静态生命周期。

struct AppConfig {
    name: &'static str,
    version: &'static str,
}

可变性

默认结构体实例是不可变的,需显式声明 mut:

let mut config = AppConfig { name: "App", version: "1.0" };
config.version = "1.1";

总结

Rust 的结构体提供了灵活的定义和行为实现方式,使用场景包括:

  • 常规结构体:适合需要明确字段含义的复杂数据。
  • 元组结构体:用于字段含义不重要的小型数据组。
  • 单元结构体:用于标记、泛型占位。
posted @ 2025-01-20 21:50  代码世界faq  阅读(10)  评论(0编辑  收藏  举报