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实现"继承"(本质是代码复用)

相关推荐
墨雨晨曦8836 分钟前
2026/09/07笔记
笔记
志尊宝1 小时前
Vue3 零基础每日笔记(005):ref 响应式基础——为什么 script 里要 .value
前端·javascript·vue.js·笔记
python零基础入门小白1 小时前
LangGraph智能体实战:如何用Langfuse构建AI运行时全链路可观测系统?
人工智能·学习·ai·chatgpt·程序员·大模型·智能体
z23456d2 小时前
第三十九天学习心得
学习
点心的游戏开发世界2 小时前
GDScript 入门笔记(十六):文件读写与数据持久化
开发语言·笔记·游戏引擎·godot
水巷石子2 小时前
学习langChain4j的第二天,体验springBoot中的starter
java·spring boot·学习·spring·langchain4j
程序员梅雨2 小时前
微服务学习最终篇: Elasticsearch
学习·elasticsearch·微服务
ByNotD0g2 小时前
跨站脚本攻击- XSS
笔记·web安全
摇滚侠2 小时前
《Spring Boot 3:高级与架构设计》第 1 章 BeanDefinitionRegistry 阅读笔记 3
spring boot·笔记·后端
東隅已逝,桑榆非晚3 小时前
c++内存管理
c++·笔记