文章目录

Rust 结构体:struct 定义与方法

发布于 2026-04-18 20:18:05 · 浏览 10 次 · 评论 0 条

Rust 结构体:struct 定义与方法


1. 定义基础结构体

结构体是 Rust 中组织相关数据的核心方式。它允许你将不同类型的数据组合成一个自定义的数据类型。

  1. 打开 你的 Rust 项目,定位到 main.rs 文件。
  2. 使用 关键字 struct 开始定义,后跟结构体的名称。名称应遵循大驼峰命名法(PascalCase)。
  3. 输入 一对花括号 {},在内部定义字段。
  4. 声明 每一个字段的名称和具体类型,中间使用冒号 : 分隔,字段之间使用逗号 , 结尾。

以下是一个定义“矩形”结构体的代码示例:

struct Rectangle {
    width: u32,
    height: u32,
}

fn main() {
    println!("定义成功!");
}

2. 实例化与访问字段

定义好结构体后,你需要创建其实例并操作其中的数据。

  1. 创建 一个实例,声明 结构体名称,后跟花括号 {}
  2. 填入 键: 值 对。键必须是结构体中定义的字段名,值的类型必须与字段定义的类型一致。
  3. 使用 let 关键字将实例绑定到变量上。如果后续需要修改字段值,必须添加 mut 关键字。
  4. 获取 字段值,输入 实例名称,后面跟着一个点 . 和字段名。

以下是实例化并访问字段的代码:

fn main() {
    // 创建可变实例
    let mut rect1 = Rectangle {
        width: 30,
        height: 50,
    };

    // 访问字段
    println!("矩形的宽度是: {}", rect1.width);

    // 修改字段
    rect1.width = 40;
    println!("修改后的宽度是: {}", rect1.width);
}

当变量名与字段名相同时,可以利用字段初始化简写语法。例如:

fn build_rectangle(width: u32, height: u32) -> Rectangle {
    Rectangle {
        width,  // 等同于 width: width
        height, // 等同于 height: height
    }
}

3. 定义结构体方法

方法与函数类似,但它们是在结构体的上下文中定义的,并且它们的第一个参数总是 self,用于表示调用该方法的结构体实例。

  1. 编写 impl 块(implementation block),格式为 impl 结构体名 { ... }
  2. impl 块内部,定义一个函数。
  3. 添加 &self 作为第一个参数。这表示该方法借用结构体实例的不可变引用。如果你需要修改实例,则使用 &mut self;如果需要获取所有权,则使用 self
  4. 使用 方法调用运算符 . 来调用定义的方法。

以下是计算矩形面积的方法示例:

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect1 = Rectangle { width: 30, height: 50 };

    println!("矩形的面积是: {} 平方像素", rect1.area());
}

4. 使用关联函数

关联函数通常用于构造器,它们不接收 self 参数。它们不是在实例上调用,而是在结构体本身上调用。

  1. 进入 结构体的 impl 块。
  2. 定义 一个不包含 self 参数的函数。
  3. 使用 双冒号语法 :: 调用关联函数。

以下是一个创建正方形关联函数的示例:

impl Rectangle {
    // 这是一个关联函数,常被用作构造函数
    fn square(size: u32) -> Self {
        Self {
            width: size,
            height: size,
        }
    }
}

fn main() {
    let sq = Rectangle::square(20);
    println!("正方形边长: {}", sq.width);
}

同一个结构体的多个 impl 块是合法的,这在代码组织时非常有用,例如将普通方法与特征实现分开。


5. self 参数速查表

理解 self 的不同形式决定了方法对实例的操作权限。

self 形式 所有权状态 适用场景
self 获取所有权 旨在消耗转化实例,使其在调用后不再可用。
&self 不可变借用 旨在读取实例数据,不修改它(最常用)。
&mut self 可变借用 旨在修改实例的内部状态。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文