Rust学习笔记005:结构体 struct

在 Rust 中,struct 是一种用于创建自定义数据类型的关键字,它允许你定义和组织数据的结构。struct 可以包含多个不同类型的字段(fields),每个字段都有一个名称和一个类型。

定义结构体

下面是一个简单的例子,展示了如何定义和使用 struct

rust 复制代码
// 定义一个结构体
struct Point {
    x: f64,
    y: f64,
}

// 使用结构体
fn main() {
    // 创建 Point 结构体的实例
    let origin = Point { x: 0.0, y: 0.0 };

    // 访问结构体的字段
    println!("X coordinate: {}", origin.x);
    println!("Y coordinate: {}", origin.y);

    // 创建可变的结构体实例,并修改字段的值
    let mut point = Point { x: 5.0, y: 10.0 };
    point.x = 7.0;

    // 结构体的解构
    let Point { x, y } = point;
    println!("X: {}, Y: {}", x, y);
}

元组结构体(Tuple Structs):

Rust 还支持一种特殊的结构体,称为元组结构体。它们类似于元组,但有一个具体的命名。

rust 复制代码
// 元组结构体
struct Color(u8, u8, u8);

fn main() {
    // 创建 Color 元组结构体的实例
    let red = Color(255, 0, 0);

    // 访问元组结构体的字段
    println!("Red component: {}", red.0);
}

在这个例子中,Color 是一个元组结构体,有三个字段,分别表示 RGB 颜色的三个分量。通过 (255, 0, 0) 创建了一个红色的实例,并通过 .0 访问了第一个字段。

类单元结构体(Unit-like Structs):

有时候,一个结构体不包含任何字段,这种结构体被称为类单元结构体。

rust 复制代码
// 类单元结构体
struct EmptyStruct;

fn main() {
    // 创建类单元结构体的实例
    let empty = EmptyStruct;
    // 无字段可访问
}

这是一个非常简单的例子,但有时候类单元结构体用于实现某种特定的 trait,或者作为类型标记的一部分。

可变性

如果结构体的某个字段需要被修改,需要将结构体声明为可变的。可变性在 Rust 中是默认不可变的,因此如果要修改结构体的字段,需要使用 mut 关键字。

rust 复制代码
struct MutableStruct {
    value: i32,
}

impl MutableStruct {
    fn modify_value(&mut self, new_value: i32) {
        self.value = new_value;
    }
}

fn main() {
    let mut my_struct = MutableStruct { value: 42 };
    my_struct.modify_value(10);
    println!("Modified value: {}", my_struct.value);
}

作为函数返回值

简写初始化

更新语法

rust 复制代码
struct Point {
    x: f64,
    y: f64,
}

fn main() {
    let p1 = Point { x: 1.0, y: 2.0 };

    // 使用更新语法创建新的结构体实例
    let p2 = Point { x: 3.0, ..p1 };

    println!("p2.x: {}", p2.x); // 输出: 3.0
    println!("p2.y: {}", p2.y); // 输出: 2.0 (来自于 p1)
}

在这个例子中,Point { x: 3.0, ..p1 } 创建了一个新的 Point 实例 p2,其中 x 被更新为 3.0,而 y 则继承自现有实例 p1

方法

  • 注:#[derive(Debug)]通过trait实现"继承"(本质是代码复用)

相关推荐
我爱挣钱我也要早睡!1 小时前
Java 复习笔记
java·开发语言·笔记
知识分享小能手4 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知6 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun6 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao7 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾7 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT7 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa7 小时前
HTML和CSS学习
前端·css·学习·html
ST.J8 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin8 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全