Rust - 元组结构体和单元结构体

 元组结构体

除了定义常规的结构体之外,也可以定义与元组类似的结构体,称为 元组结构体tuple structs),元组结构体的主要特征是没有字段名,只有字段类型,当我们想给整个元组取一个名字,并使元组成为与其他元组不同的类型时,元组结构体是很有用的,这时像常规结构体那样为每个字段命名就显得多余和形式化了,比如定义颜色的RGB和坐标。要定义元组结构体,以 struct关键字和结构体名开头并后跟元组中的类型。例如,下面是两个分别叫做 Color和 Point元组结构体的定义和用法:

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);

需要注意 black和 origin值的类型不同,因为它们是不同的元组结构体的实例。你定义的每一个结构体有其自己的类型,即使结构体中的字段有着相同的类型。例如,一个获取 Color类型参数的函数不能接受 Point作为参数,即便这两个类型都由三个 i32值组成。在其他方面,元组结构体实例类似于元组:可以将其解构为单独的部分,也可以使用 .后跟索引来访问单独的值,等等。

单元结构体

我们也可以定义一个没有任何字段的结构体!它们被称为 类单元结构体unit-like structs)因为它们类似于 (),即 unit 类型。类单元结构体常常在你想要在某个类型上实现 trait 但不需要在类型中存储数据的时候发挥作用。trait我们会在后面的文章进行介绍。

结构体数据的所有权

struct UserInfo {name: String,age: i32,sex: bool,  // true表示男  false表示女
}

在上面代码示例中,使用了自身拥有所有权的 String类型而不是 &str字符串 slice 类型。原因就是想要这个结构体拥有它所有的数据,为此只要整个结构体是有效的话其数据也是有效的。这里会提到一个 生命周期lifetimes)的概念,后续文章也会介绍哦,生命周期确保结构体引用的数据有效性跟结构体本身保持一致。如果尝试在结构体中存储一个引用而不指定生命周期将会引发程序编译失败:

struct User {username: &str,email: &str,sign_in_count: u64,active: bool,
}fn main() {let user1 = User {email: "someone@example.com",username: "someusername123",active: true,sign_in_count: 1,};
}

报错信息如下所示:

error[E0106]: missing lifetime specifier-->|
2 |     username: &str,|               ^ expected lifetime parametererror[E0106]: missing lifetime specifier-->|
3 |     email: &str,|            ^ expected lifetime parameter

我们会在后续的文章中介绍如何修复这个问题以便在结构体中存储引用。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1076739.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

锐捷(二十一)全局地址绑定

vlan划分和vlanif接口配置略,注意vlanif接口里要no shutdown配置如下: Address-bind 192.168.1.1 AAAA.BBBB.CCCCAddress-bind uplink g0/0Address-bind binding-filter loggingAddress-bind install 此时,IP为192.168.1.1 mac地址为AAAA.B…

20240212请问如何将B站下载的软字幕转换成为SRT格式?

20240212请问如何将B站下载的软字幕转换成为SRT格式? 2024/2/12 12:47 百度搜索:字幕 json 转 srt json srt https://blog.csdn.net/a_wh_white/article/details/120687363?share_token2640663e-f468-4737-9b55-73c808f5dcf0 https://blog.csdn.net/a_w…

Microsoft Excel 加载数据分析工具

Microsoft Excel 加载数据分析工具 1. 打开 Excel,文件 -> 选项2. 加载项 -> 转到…3. 分析工具库、分析工具库 - VBA4. 打开 Excel,数据 -> 数据分析References 1. 打开 Excel,文件 -> 选项 2. 加载项 -> 转到… ​​​ 3…

蓝桥杯-X图形

问题描述 给定一个字母矩阵。一个 X 图形由中心点和由中心点向四个 45度斜线方向引出的直线段组成,四条线段的长度相同,而且四条线段上的字母和中心点的字母相同。 一个 X 图形可以使用三个整数 r,c,L 来描述,其中 r,c 表示中心点位于第 r 行…

Linux network namespace 访问外网以及多命名空间通信(经典容器组网 veth pair + bridge 模式认知)

写在前面 整理K8s网络相关笔记博文内容涉及 Linux network namespace 访问外网方案 Demo实际上也就是 经典容器组网 veth pair bridge 模式理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已…

【后端高频面试题--Nginx篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--Nginx篇 什么是Nginx?为什么要用Nginx?为什么Nginx性能…

基于Locust实现MQTT协议服务的压测脚本

一、背景简介 业务背景大概介绍一下,就是按照国标规定,车辆需要上传一些指定的数据到ZF的指定平台,同时车辆也会把数据传到企业云端服务上,于是乎就产生了一些性能需求。 目前我们只是先简单的进行了一个性能场景的测试&#xf…

没更新的日子也在努力呀,布局2024!

文章目录 ⭐ 没更新的日子也在努力呀⭐ 近期的一个状态 - 已圆满⭐ 又到了2024的许愿时间了⭐ 开发者要如何去 "创富" ⭐ 没更新的日子也在努力呀 感觉很久没有更新视频了,好吧,其实真的很久没有更新短视频了。最近的一两个月真的太忙了&#…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台(从桌面计算机系统到嵌入式硬件)的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

SHA-512在Go中的实战应用: 性能优化和安全最佳实践

SHA-512在Go中的实战应用: 性能优化和安全最佳实践 简介深入理解SHA-512算法SHA-512的工作原理安全性分析SHA-512与SHA-256的比较结论 实际案例分析数据完整性验证用户密码存储数字签名总结 性能优化技巧1. 利用并发处理2. 避免不必要的内存分配3. 适当的数据块大小总结 与其他…

【玩转408数据结构】线性表——线性表的顺序表示(顺序表)

知识回顾 通过前文,我们了解到线性表是具有相同数据类型的有限个数据元素序列;并且,线性表只是一种逻辑结构,其不同存储形式所展现出的也略有不同,那么今天我们来了解一下线性表的顺序存储——顺序表。 顺序表的定义 …

上个月刚跟男朋友一起买了个三百万的房子,准备明年结婚,这个月他突然被裁了...

职场变动,尤其是裁员,已经成为我们无法忽视的现实。不管你是互联网大佬,还是刚入行的新人,这个问题都可能突如其来,影响到你的生活和计划。 想象一下,你和你的另一半刚刚为了将来的幸福生活,拼尽…

使用 Windows 11/10 上的最佳 PDF 转 Word 转换器释放 PDF 的潜力

毫无疑问,PDF 是最好的文档格式之一,但就像其他格式一样,有时它们确实会带来一些限制。例如,在某些情况下,您可能想要将 PDF 转换为 Word。在这种情况下,您始终可以借助 PDF 到 Word 转换器的帮助。 为了说…

python - 模块使用详解

前言 Python有非常强大的第三方库,也有非常多的内置模块帮助开发人员实现某些功能,无需开发人员自己造轮子。本文介绍Python的模块。 什么是模块 模块简单来说就是一系列功能的集合体,如果将程序的开发比喻成拼图,模块就是各种…

12.atoi函数

文章目录 函数简介函数原型 代码运行 函数简介 函数原型 int atoi(char const *string);函数把字符转化为正数 代码运行 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h>int main() {int ret 0;char str[20] "112233";ret …

Day 43 | 动态规划 1049. 最后一块石头的重量 II 、494. 目标和 、 474.一和零

1049. 最后一块石头的重量 II 题目 文章讲解 视频讲解 思路&#xff1a;dp[j] 表示容量为 j 的背包&#xff0c;最多可以背最大重量为dp[j]。 class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int i 0; i < stones.length; i) {sum stone…

Django模型层part two - 多表关系创建和多表操作

前言 继续上面一篇文章的内容&#xff0c;本文介绍多表操作。使用django ORM可以创建多表关系&#xff0c;并且也支持多张表之间的操作&#xff0c;以创建表关系和查询两部分说明django ORM的多表操作。以作者、图书、出版社和作者信息几张表作为案例进行说明。 创建表关系 …

视觉slam十四讲学习笔记(三)李群与李代数

1. 理解李群与李代数的概念&#xff0c;掌握 SO(3), SE(3) 与对应李代数的表示方式。 2. 理解 BCH 近似的意义。 3. 学会在李代数上的扰动模型。 4. 使用 Sophus 对李代数进行运算。 目录 前言 一、李群李代数基础 1 群 2 李代数的引出 3 李代数的定义 4 李代数 so(3…

Docker笔记-搭建Python环境、安装依赖、打包镜像、导入镜像、编写bash脚本灵活调用

说明 适合无联网的机器及多Python的机器进行部署。 制作docker版Python环境 有网络及有docker的,拉取指定版本的python如: docker pull python:3.7 安装好后进入容器: docker run -it <name> /bin/bash 使用pip安装各种依赖: pip install <name> pip in…

Python访问数据库

目录 SQLite数据库 SQLite数据类型 Python数据类型与SQLite数据类型的映射 使用GUI管理工具管理SQLite数据库 数据库编程的基本操作过程 sqlite3模块API 数据库连接对象Connection 游标对象Cursor 数据库的CRUD操作示例 示例中的数据表 无条件查询 有条件查询 插入…