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

【Rust练习】10.元组

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

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

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

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

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 🌟 可以使用索引来获取元组的成员

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

surface是第三个,索引是2

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

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

// 修复代码错误
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,更长的元组未实现(而且可能永远无法实现了)。

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 使用模式匹配来解构元组

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

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

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 🌟🌟 解构式赋值

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

同上

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 🌟🌟 元组可以用于函数的参数和返回值

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 普元EOS-利用热更新(热启动)提高开发效率
  • C高级编程 第九天(链表)
  • 回顾MVC
  • 关于 Vue/React 的 cli 中运用 webpack 打包的原理简单解析
  • 网络安全售前入门02——产品了解
  • es相关概念、索引操作(相当于mysql中的数据库操作)
  • 致远OA OCR票据识别组件
  • 手算神经网络MAC和FLOP
  • pve(‌Proxmox Virtual Environment)-修改时区
  • 模型 7S分析法(麦肯锡)
  • 线程同步方式
  • Pytorch封装简单RNN模型,进行中文训练及文本预测
  • Python 爬虫爬取豆瓣电影列表信息,爬虫的原理,应用领域介绍学习
  • 回归预测|基于北方苍鹰优化核极限学习机的数据预测Matlab程序NGO-KELM 多特征输入单输出
  • 强大的 solidity 框架:Foundry 之命令行工具 — Cast
  • emacs初体验
  • input的行数自动增减
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Iterator 和 for...of 循环
  • Python3爬取英雄联盟英雄皮肤大图
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vultr 教程目录
  • 阿里云前端周刊 - 第 26 期
  • 产品三维模型在线预览
  • 那些被忽略的 JavaScript 数组方法细节
  • 实现菜单下拉伸展折叠效果demo
  • 移动端高清、多屏适配方案
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • #if和#ifdef区别
  • #Z0458. 树的中心2
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (PADS学习)第二章:原理图绘制 第一部分
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)opengl函数加载和错误处理
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)Linux+Windows下安装ffmpeg
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .htaccess配置常用技巧
  • .net 7和core版 SignalR
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET文档生成工具ADB使用图文教程
  • .net专家(张羿专栏)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn