目录
什么是 Rust 结构体
Rust 结构体 (Struct) 是一种自定义复合类型,用于将多个相关数据字段组织在一起。它类似于其他语言中的类,但不默认包含方法(需通过 impl
添加)。Rust 支持三种结构体:命名字段、元组结构体和单元结构体。
为什么要使用结构体
- 数据组织:将相关数据聚合为一个单元。
- 可读性:通过字段名表达数据含义。
- 类型安全:确保数据结构一致。
- 扩展性:支持添加方法和行为。
结构体的定义与实例化
- 命名字段结构体:
- 使用
struct
定义,字段有名称。 - 实例化时指定字段值。
- 元组结构体:
- 无字段名,仅有序类型。
- 使用圆括号实例化。
- 单元结构体:
- 无字段,用于占位或标记。
struct Point {
x: i32,
y: i32,
}
struct Pair(i32, f64);
struct Unit;
结构体的方法
- 使用
impl
块为结构体定义方法。 - 关联函数:不接收
self
(类似静态方法)。 - 实例方法:接收
self
、&self
或&mut self
。
impl Point {
fn new(x: i32, y: i32) -> Point { // 关联函数
Point { x, y }
}
fn distance(&self) -> f64 { // 实例方法
((self.x.pow(2) + self.y.pow(2)) as f64).sqrt()
}
}
结构体的更新与解构
- 更新语法:使用
..
复制现有实例的部分字段。 - 解构:通过模式匹配提取字段值。
let p1 = Point { x: 1, y: 2 };
let p2 = Point { x: 3, ..p1 }; // 更新 x,y 从 p1 复制
代码示例
命名字段结构体
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect = Rectangle { width: 30, height: 50 };
println!("Area: {}", rect.area());
}
运行结果:
Area: 1500
元组结构体与单元结构体
struct Color(u8, u8, u8); // RGB
struct Empty;
fn main() {
let red = Color(255, 0, 0);
let empty = Empty;
println!("Red: ({}, {}, {})", red.0, red.1, red.2);
}
运行结果:
Red: (255, 0, 0)
更新与解构
struct User {
name: String,
age: u32,
active: bool,
}
fn main() {
let user1 = User {
name: String::from("Alice"),
age: 25,
active: true,
};
let user2 = User {
name: String::from("Bob"),
..user1
};
let User { name, age, .. } = user2;
println!("Name: {}, Age: {}", name, age);
}
运行结果:
Name: Bob, Age: 25
参考资料与出站链接
- 官方文档:
- 学习资源:
- 社区支持:
发表回复