结构体与枚举
**结构体(struct)**把多个有名字的字段组合为一种类型;**枚举(enum)**表示「多选一」的变体集合。二者均可带 泛型与Trait、impl、模式匹配。
结构体三种形态
| 形态 | 语法要点 | 用途 |
|---|---|---|
| 具名字段 | struct User { id: u32, name: String } | 最常见 |
| 元组结构体 | struct Point(i32, i32) | 简单包装 / newtype |
| 单元结构体 | struct Marker; | 零大小类型、标记 |
字段可修改性由整个绑定的 mut 决定(let mut u: User),而非单个字段关键字。
枚举 enum
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
}- 变体可无数据、元组式或类结构体。
- 代数数据类型:
Option<T>、Result<T, E>是标准库枚举,见 错误处理。
方法语法
impl User {
fn new(id: u32, name: String) -> Self { ... }
fn rename(&mut self, n: String) { self.name = n; }
}self/&self/&mut self:所有权/借用与 借用与引用 一致。- 关联函数:首参非
self,如User::new(无实例时调用)。
impl Trait for Type
为实现某 泛型与Trait 而写:
impl std::fmt::Display for User { ... }与所有权
嵌套的 String、Vec 随外层 struct 整体 move;部分移动后,原绑定可能不能再整体使用(但未被移动的字段仍可能可用——注意部分移动规则)。