目录

  1. 什么是 Rust 结构体
  2. 为什么要使用结构体
  3. 结构体的定义与实例化
  4. 结构体的方法
  5. 结构体的更新与解构
  6. 代码示例
  7. 参考资料与出站链接

什么是 Rust 结构体

Rust 结构体 (Struct) 是一种自定义复合类型,用于将多个相关数据字段组织在一起。它类似于其他语言中的类,但不默认包含方法(需通过 impl 添加)。Rust 支持三种结构体:命名字段、元组结构体和单元结构体。


为什么要使用结构体

  • 数据组织:将相关数据聚合为一个单元。
  • 可读性:通过字段名表达数据含义。
  • 类型安全:确保数据结构一致。
  • 扩展性:支持添加方法和行为。

结构体的定义与实例化

  1. 命名字段结构体
  • 使用 struct 定义,字段有名称。
  • 实例化时指定字段值。
  1. 元组结构体
  • 无字段名,仅有序类型。
  • 使用圆括号实例化。
  1. 单元结构体
  • 无字段,用于占位或标记。
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

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 社区支持