当前位置: 首页 > news >正文

Rust学习笔记005:结构体 struct

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

定义结构体

在这里插入图片描述

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

// 定义一个结构体
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 还支持一种特殊的结构体,称为元组结构体。它们类似于元组,但有一个具体的命名。

在这里插入图片描述

// 元组结构体
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):

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

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

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

可变性

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

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);
}

作为函数返回值

在这里插入图片描述

简写初始化

在这里插入图片描述

更新语法

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.0println!("p2.y: {}", p2.y); // 输出: 2.0 (来自于 p1)
}

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

方法

在这里插入图片描述

在这里插入图片描述

  • 注:#[derive(Debug)]通过trait实现“继承”(本质是代码复用)
    在这里插入图片描述
    在这里插入图片描述
http://www.lryc.cn/news/271266.html

相关文章:

  • maven中dependencyManagement标签
  • SparkStreaming与Kafka整合
  • openwrt源码编译
  • 【Leetcode Sheet】Weekly Practice 22
  • ROS TF坐标变换 - 静态坐标变换
  • 香橙派5plus从ssd启动Ubuntu
  • JWT+Redis 实现接口 Token 校验
  • C语言 linux文件操作(二)
  • 机器学习分类
  • CSS之元素转换
  • 自激振荡电路笔记 电弧打火机
  • Linux su 命令
  • 论文阅读: AAAI 2022行人重识别方向论文-PFD_Net
  • 蓝牙物联网灯控设计方案
  • Codeforces Round 900 (Div. 3)(A-F)
  • vue大屏-列表自动滚动vue-seamless-scroll
  • easyx的窗口函数
  • 【记录】开始学习网络安全
  • 【Java EE初阶三 】线程的状态与安全(下)
  • MD5算法
  • Postman使用
  • 【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图
  • MFC随对话框大小改变同时改变控件大小
  • MK米客方德品牌 SD NAND在对讲机领域的引领作用
  • 软件测试/测试开发丨Python 封装 学习笔记
  • Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性
  • 【ROS2】MOMO的鱼香ROS2(四)ROS2入门篇——ROS2节点通信之话题与服务
  • 2022年山东省职业院校技能大赛高职组云计算赛项试卷第三场-公有云
  • 现代 NLP:详细概述,第 1 部分:transformer
  • 记一次Mac端mysql重置密码