当前位置: 首页 > 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实现“继承”(本质是代码复用)
    在这里插入图片描述
    在这里插入图片描述

相关文章:

Rust学习笔记005:结构体 struct

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

maven中dependencyManagement标签

简介 dependencyManagement正如其名,用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后,子项目(module)中引用相同的依赖时可以不指定version标签自动引入…...

SparkStreaming与Kafka整合

1.3 SparkStreaming与Kafka整合 1.3.1 整合简述 kafka是做消息的缓存,数据和业务隔离操作的消息队列,而sparkstreaming是一款准实时流式计算框架,所以二者的整合,是大势所趋。 ​ 二者的整合,有主要的两大版本。 kaf…...

openwrt源码编译

下载openwrt源码 git clone https://github.com/openwrt/chaos_calmer.git // 官方下载地址 当前我们基于15.05版本开发,如果开发者想用最新的OpenWRT系统,可以下载 https://github.com/openwrt/openwrt.git git clone https://github.com/Ying-Yun/o…...

【Leetcode Sheet】Weekly Practice 22

Leetcode Test 1349 参加考试的最大学生数(12.26) 给你一个 m * n 的矩阵 seats 表示教室中的座位分布。如果座位是坏的(不可用),就用 # 表示;否则,用 . 表示。 学生可以看到左侧、右侧、左上、右上这四个方向上紧邻…...

ROS TF坐标变换 - 静态坐标变换

目录 一、静态坐标变换(C实现)二、静态坐标变换(Python实现) 如前文所属,ROS通过广播的形式告知各模块的位姿关系,接下来详述这一机制的代码实现。 模块间的位置关系有两种类型,一种是相对固定…...

香橙派5plus从ssd启动Ubuntu

官方接口图 我实际会用到的就几个接口,背面的话就一个M.2固态的位置: 其中WIFI模块的接口应该也可以插2230的固态,不过是pcie2.0的速度,背面的接口则是pcie3.0*4的速度,差距还是挺大的。 开始安装系统 准备工作 一张…...

JWT+Redis 实现接口 Token 校验

1、业务逻辑 有一些接口,需要用户登录以后才能访问,用户没有登录则无法访问。 因此,对于一些限制用户访问的接口,可以在请求头中增加一个校验参数,用于判断接口对应的用户是否登录。 而对于一些不需要登录即可访问的接…...

C语言 linux文件操作(二)

文章目录 一、获取文件长度二、追加写入三、覆盖写入四、文件创建函数creat 一、获取文件长度 通过lseek函数,除了操作定位文件指针,还可以获取到文件大小,注意这里是文件大小,单位是字节。例如在file1文件中事先写入"你好世…...

机器学习分类

1. 监督学习 监督学习指的是人们给机器一大堆标记好的数据,比如: 一大堆照片,标记出哪些是猫的照片,哪些是狗的照片 让机器自己学习归纳出算法或模型 使用该算法或模型判断出其他没有标记的照片是否是猫或狗 上述流程如下图所…...

CSS之元素转换

我想大家在写代码时有一个疑问&#xff0c;块级元素可以转换成其他元素吗&#xff1f; 让我为大家介绍一下元素转换 1.display:block(转换成块元素) display&#xff1a;block可以把我们的行内元素或者行内块元素转换成块元素 接下来让我为大家演示一下&#xff1a; <!DO…...

自激振荡电路笔记 电弧打火机

三极管相关 三极管的形象描述 二极管 简单求解&#xff08;理想&#xff09; 优先导通&#xff08;理想&#xff09; 恒压降 稳压管&#xff08;二极管plus&#xff09; 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…...

Linux su 命令

Linux su&#xff08;英文全拼&#xff1a;switch user&#xff09;命令用于变更为其他使用者的身份&#xff0c;除 root 外&#xff0c;需要键入该使用者的密码。 使用权限&#xff1a;所有使用者。 语法 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USE…...

论文阅读: AAAI 2022行人重识别方向论文-PFD_Net

本篇博客用于记录一篇行人重识别方向的论文所提出的优化方法《Pose-Guided Feature Disentangling for Occluded Person Re-identification Based on Transformer》&#xff0c;论文中提出的PDF_Net模型的backbone是采用《TransReID: Transformer-based Object Re-Identificati…...

蓝牙物联网灯控设计方案

蓝牙技术是当前应用最广泛的无线通信技术之一&#xff0c;工作在全球通用的 2.4GHZ 的ISM 频段。蓝牙的工作距离约为 100 米&#xff0c;具有一定的穿透性&#xff0c;没有方向限制。具有低成本、抗干扰能力强、传输质量高、低功耗等特点。蓝牙技术组网比较简单&#xff0c;无需…...

Codeforces Round 900 (Div. 3)(A-F)

比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k&#xff0c;就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…...

vue大屏-列表自动滚动vue-seamless-scroll

vue大屏-列表自动滚动vue-seamless-scroll vue-seamless-scroll的官方文档地址&#xff1a;https://chenxuan0000.github.io/vue-seamless-scroll/zh/guide/ 具体效果可到官方文档那里查看。 1、下载依赖 npm install vue-seamless-scroll --save2、使用例子 <template…...

easyx的窗口函数

文章目录 前言一、EasyX的颜色二、EasyX的坐标和设备1&#xff0c;EasyX的坐标2&#xff0c;EasyX的设备 三、窗口函数1&#xff0c;初始化窗口函数2&#xff0c;关闭绘图窗口3&#xff0c;设置窗口背景板颜色4&#xff0c;清空绘图设备 前言 easyx是针对c的图形库&#xff0c;…...

【记录】开始学习网络安全

本文持续更新学习进度 背景 在私企干了5年虚拟化、云原生相关的运维&#xff0c;学到了很多&#xff0c;但不成体系。老板是清华毕业法国留学在德勤干过&#xff0c;最后回国创业的野路子。我工作是为了更好的生活&#xff0c;我挺担心老板因为家庭变故或者炒个原油宝&#x…...

【Java EE初阶三 】线程的状态与安全(下)

3. 线程安全 线程安全&#xff1a;某个代码&#xff0c;不管它是单个线程执行&#xff0c;还是多个线程执行&#xff0c;都不会产生bug&#xff0c;这个情况就成为“线程安全”。 线程不安全&#xff1a;某个代码&#xff0c;它单个线程执行&#xff0c;不会产生bug&#xff0c…...

FanControl深度实战指南:5分钟精通Windows风扇精准控制

FanControl深度实战指南&#xff1a;5分钟精通Windows风扇精准控制 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

Win11 VMware 报错“未能启动虚拟机”?深入解析 Hyper-V 与注册表冲突的修复指南

1. 为什么Win11下VMware会报错"未能启动虚拟机"&#xff1f; 最近帮朋友调试Win11上的VMware Workstation时&#xff0c;遇到了经典的"未能启动虚拟机"错误。这个报错背后其实是Windows 11的虚拟化安全机制与第三方虚拟化软件的兼容性问题。微软在Windows …...

MongoDB 4.4+ 版本后,手把手教你搞定mongodump独立安装与配置(附环境变量设置)

MongoDB 4.4独立工具链部署指南&#xff1a;从零构建mongodump备份环境 当你在全新的Linux服务器上部署了MongoDB 4.4或更新版本&#xff0c;准备执行例行数据库备份时&#xff0c;在终端输入熟悉的mongodump命令却只得到command not found的响应——这不是你的操作失误&#…...

Promises/A+完全指南:深入理解JavaScript异步编程标准规范

Promises/A完全指南&#xff1a;深入理解JavaScript异步编程标准规范 【免费下载链接】promises-spec An open standard for sound, interoperable JavaScript promises—by implementers, for implementers. 项目地址: https://gitcode.com/gh_mirrors/pr/promises-spec …...

OpenRGB终极指南:一个软件搞定所有RGB灯光控制,告别厂商软件束缚

OpenRGB终极指南&#xff1a;一个软件搞定所有RGB灯光控制&#xff0c;告别厂商软件束缚 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgra…...

【稀缺首发】Midjourney等距视角工业设计协议(ISO/IEC 21827-2024兼容版):含12类建筑/机械/游戏资产等距规范库,仅限前500名开发者领取

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;等距视角工业设计协议的范式演进与ISO/IEC 21827-2024兼容性解析 等距视角工业设计协议&#xff08;Isometric Industrial Design Protocol, IIDP&#xff09;已从早期的CAD渲染辅助规范&#xff0c;逐…...

2026届学术党必备的降重复率神器实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术飞速发展着&#xff0c;学术研究和论文创作领域迎来了深刻变革&#xff0c;维普…...

开发AI助手微服务时利用Taotoken实现模型的热切换与降级

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI助手微服务时利用Taotoken实现模型的热切换与降级 在构建对外提供AI对话能力的微服务时&#xff0c;服务的稳定性和连续性至…...

CefFlashBrowser:终极Flash浏览器解决方案的技术实现与实战指南

CefFlashBrowser&#xff1a;终极Flash浏览器解决方案的技术实现与实战指南 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在Adobe Flash Player正式退役后&#xff0c;无数经典Flash内容…...

瑞为技术获IPO备案:年营收4.4亿 亏损6815万

雷递网 雷建平 5月15日厦门瑞为信息技术股份有限公司&#xff08;简称“瑞为技术”&#xff09;日前获IPO备案&#xff0c;拿到了上市钥匙。与瑞为技术一同拿到上市备案的公司还有上海仙工智能科技股份有限公司、江西齐云山食品股份有限公司、广东鼎泰高科技术股份有限公司。年…...