在 Rust 中,结构体(struct)是定义数据类型和管理复杂数据的核心工具,类似于其他语言中的类,但它不支持内置继承。Rust 提供了三种基本的结构体形式:常规结构体(regular struct)、元组结构体(tuple struct)和单元结构体(unit struct)。下面详细讲解:
1. 常规结构体(Regular Struct)
常规结构体是 Rust 中最常用的结构体类型,允许为每个字段命名。
定义
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]
注解可以为结构体自动实现常用的特性,例如 Debug
、Clone
、PartialEq
等。
#[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 输出
}
总结
Rust 的结构体提供了灵活的定义和行为实现方式,使用场景包括:
- 常规结构体:适合需要明确字段含义的复杂数据。
- 元组结构体:用于字段含义不重要的小型数据组。
- 单元结构体:用于标记、泛型占位。