【Rust练习】10.元组

news/2024/9/18 12:33:28/ 标签: rust, 开发语言, 后端

练习题来自:https://practice-zh.course.rs/compound-types/tuple.html

1 元组中的元素可以是不同的类型。元组的类型签名是 (T1, T2, …), 这里 T1, T2 是相对应的元组成员的类型.

rust">fn main() {let _t0: (u8,i16) = (0, -1);// 元组的成员还可以是一个元组let _t1: (u8, (i16, u32)) = (0, (-1, 1));// 填空让代码工作let t: (u8, __, i64, __, __) = (1u8, 2u16, 3i64, "hello", String::from(", world"));
}

我在这里说一下我对元组的理解,这个东西类似于Cunion,也就是C++variant,这两个类型我都有文章讲过:
【C++】union
【C++】std::variant

至于这道题,很简答,写出对应的类型就行:

rust">fn main() {let _t0: (u8,i16) = (0, -1);// 元组的成员还可以是一个元组let _t1: (u8, (i16, u32)) = (0, (-1, 1));// 填空让代码工作let t: (u8, u16, i64, &str, String) = (1u8, 2u16, 3i64, "hello", String::from(", world"));
}

2 🌟 可以使用索引来获取元组的成员

rust">// 修改合适的地方,让代码工作
fn main() {let t = ("i", "am", "sunface");assert_eq!(t.1, "sunface");
}

surface是第三个,索引是2

rust">fn main() {let t = ("i", "am", "sunface");assert_eq!(t.2, "sunface");
}

3 🌟 过长的元组无法被打印输出

rust">// 修复代码错误
fn main() {let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);println!("too long tuple: {:?}", too_long_tuple);
}

目前仅仅为大小不超过 12 的元组实现了 Debug,更长的元组未实现(而且可能永远无法实现了)。

rust">fn main() {let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);let sup: (i32, i32) = (12, 13);println!("too long tuple: {:?} {:?}", too_long_tuple, sup);
}

4 使用模式匹配来解构元组

rust">fn main() {let tup = (1, 6.4, "hello");// 填空let __ = tup;assert_eq!(x, 1);assert_eq!(y, "hello");assert_eq!(z, 6.4);
}

其实就是给对应位置的参数起个别名。

rust">fn main() {let tup = (1, 6.4, "hello");// 填空let (x, z, y) = tup;assert_eq!(x, 1);assert_eq!(y, "hello");assert_eq!(z, 6.4);
}

5 🌟🌟 解构式赋值

rust">fn main() {let (x, y, z);// 填空__ = (1, 2, 3);assert_eq!(x, 3);assert_eq!(y, 1);assert_eq!(z, 2);
}

同上

rust">fn main() {let (x, y, z);// 填空(y, z, x) = (1, 2, 3);assert_eq!(x, 3);assert_eq!(y, 1);assert_eq!(z, 2);
}

6 🌟🌟 元组可以用于函数的参数和返回值

rust">fn main() {// 填空,需要稍微计算下let (x, y) = sum_multiply(__);assert_eq!(x, 5);assert_eq!(y, 6);
}fn sum_multiply(nums: (i32, i32)) -> (i32, i32) {(nums.0 + nums.1, nums.0 * nums.1)
}
rust">fn main() {// 填空,需要稍微计算下let (x, y) = sum_multiply((2, 3));assert_eq!(x, 5);assert_eq!(y, 6);
}fn sum_multiply(nums: (i32, i32)) -> (i32, i32) {(nums.0 + nums.1, nums.0 * nums.1)
}

http://www.ppmy.cn/news/1516395.html

相关文章

相关性分析

斯皮尔曼、皮尔逊、肯德尔、点双列相关分析、偏相关分析、距离相关分析、双变量回归分析和互信息。 特性斯皮尔曼相关分析(Spearman Correlation)皮尔逊相关分析(Pearson Correlation)肯德尔相关分析(Kendall’s Tau&…

华为OD题目 csv格式的数据 字符串 用C没写出来

这题对于嵌入式mcu的人来说,太难为了。不想解了,烂摆。有心情再说把。 将一个csv格式的数据文件中包含有单元格引用的内容替换为对应单元格内容的实际值。 Comma seprated values(CSV)逗号分隔值,csv格式的数据文件使用…

nodemon学习(一)简介、安装、配置、使用

nodemon用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。以前,我们开发一个node后端服务时,每次更改文件,均需重启一下,服务才能生效。这使我们的开发效率降低了很多。nodemon的出现,可以…

Catf1ag CTF Crypto(六)

前言 Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握C…

ffmpeg.exe命令行常见应用

基本转换: ffmpeg -i input.mp4 output.avi将input.mp4文件转换为output.avi文件。 提取音频: ffmpeg -i input.mp4 -vn output.mp3从input.mp4文件中提取音频并保存为output.mp3文件。 视频剪辑: ffmpeg -i input.mp4 -ss 00:00:30 -t 00:…

深入探讨Java多线程

我的主页:2的n次方_ 1. 多线程的概念 多线程是指在同一个程序中同时执行多个线程的技术。线程是操作系统能够独立调度和执行的最小单位。在Java中,线程由Thread类来表示,所有的线程都是通过这个类或其子类来创建和控制的。通过合理的多线…

codetop标签动态规划大全C++讲解(上)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o

主要供自己回顾学习,会持续更新,题源codetop动态规划近半年 1.零钱兑换2.零钱兑换II3.面试题08.11.硬币4.单词拆分5.最长递增子序列6.最长递增子序列的个数7.得到山形数组的最少删除次数8.最长公共子序列9.最长重复子数组10.最长等差数列11.最大子数组和…

Docker数据卷使用手册

目录 目标 前言 概念 官方文档 匿名卷(Anonymous Volumes) 简介 案例 命名卷(Named Volumes) 简介 案例 目标 掌握Volume命令通过演示案例,理解数据卷种类与各自的用途。 前言 我们在很多网上教程上可以看到…

前端宝典十:webpack性能优化最佳实践

Webpack 内置了很多功能。 通常你可用如下经验去判断如何配置 Webpack: 想让源文件加入到构建流程中去被 Webpack 控制,配置 entry;想自定义输出文件的位置和名称,配置 output;想自定义寻找依赖模块时的策略&#xff…

云计算day31

⼀、Docker 1、Docker介绍.pdf 1、Docker 是什么? Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙 盒”机制,容器之间不会存在任何接⼝。 Docker 通过 Linux Container(容器)技术将任意…

如何在Docker中部署Eureka Server:容器化微服务注册中心

在现代微服务架构中,服务注册和发现是至关重要的。Eureka Server 是一个由 Netflix 开发的开源服务注册和发现工具,它允许微服务实例在运行时动态地注册和查询其他服务。将 Eureka Server 部署在 Docker 中可以提高其可移植性和可维护性,同时…

Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱

Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱接入 🌟 手机短信与邮箱短信验证码的应用场景 在现代应用中,短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景&#xf…

elasticsearch -- RestClient操作文档

RestClient操作文档 为了与索引库操作分离,我们再次参加一个测试类,做两件事情: 初始化RestHighLevelClient我们的酒店数据在数据库,需要利用IHotelService去查询,所以注入这个接口 package cn.itcast.hotel;import…

机器学习:opencv图像识别--图片专项

目录 前言 一、读取图片 1.安装opencv库 2.读取彩色图片 3.读取灰度图 二、RGB 1.RGB的概念 2.颜色通道: 3.图像表示 4.代码实现单通道图像 三、ROI 1.代码实现 四、图片打码 五、图片组合 六、图片缩放 总结 前言 OpenCV(Open Source C…

Nginx 丢弃指定响应头

如果想丢弃服务器响应回来的某个头,可以使用Nginx进行代理该服务器,再进行配置 Nginx中丢弃指定响应头 Nginx 中拦截某个响应并丢弃特定的响应头,可以使用 proxy_hide_header 指令。 修改 Nginx 配置 在您的 Nginx 配置文件中&#xff08…

WPF—DispatcherTimer定时器

WPF—DispatcherTimer定时器 WPF界面是没有timer控件的,Winform有。但是我们可以使用DispatcherTimer来实现定时器。 在WPF应用程序中,DispatcherTimer是一种常用的计时器工具,它可以在指定的时间间隔触发事件。以下是一个简单的使用DispatcherTimer的…

SpringBoot项目如何使用和打包本地第三方jar包

有时候我们引用了maven仓库不存在的第三方jar,项目打包后jar包里没有引用的jar,解决方法往下看。 一、目录介绍 SpringBoot项目通过idea打成jar包部署。 将项目打成jar包后,所有引用的jar都存在于BOOT-INF\lib下: 如果存在本地…

汽车冷却液温度传感器的作用与检测方法

汽车冷却系统中的关键部件之一是冷却液温度传感器,它的位置通常在发动机的缸体或水泵附近,与冷却液直接接触。该传感器的作用是监测发动机冷却液的温度,它采用负温度系数热敏电阻,这种电阻随温度升高而降低。当冷却液温度达到预定…

Jmeter 性能测试实战教程

一、性能测试流程 进行性能测试前,我们首先需要了解一下性能测试大致分为哪些流程,这样才能保证测试过程有序开展: 1、性能需求分析 了解哪些业务需要(一般都是用户量大的核心业务,比如登录,查询等功能&…

【AI学习】LLaMA模型的微调成本有几何?

在前面文章《LLaMA 系列模型的进化(二)》中提到了Stanford Alpaca模型。 Stanford Alpaca 基于LLaMA (7B) 进行微调,通过使用 Self-Instruct 方法借助大语言模型进行自动化的指令生成,Stanford Alpaca 生成了 52K 条指令遵循样例数…