当前位置: 首页 > 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)
}

http://www.mrgr.cn/news/15232.html

相关文章:

  • HarmonyOS(52) 使用安全控件SaveButton保存图片
  • Git之1.5版本重要特性及用法实例(五十三)
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • python发送电子邮件:SMTP服务器配置步骤?
  • 本地缓存Caffeine框架的学习笔记
  • 二叉搜索树(c++)
  • Oracle使用手册
  • 【大模型从入门到精通46】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流3
  • 升降梯人数统计识别摄像机
  • hive-去字符串前导0
  • jQuery基础——事件
  • 【drools】kie:官方仓库clone 遇到问题解决
  • Bytebase 2.22.2 - 允许在工作空间为群组分配角色
  • Python深浅拷贝
  • 手算神经网络MAC和FLOP
  • 在 macOS 的 VMware Fusion 上为 Ubuntu 虚拟机设置稳定的静态 IP 地址
  • Java爬虫
  • 关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)
  • 2024年8月29日(harbor似有仓库管理,Docker-compose容器编排)
  • 【Docker】docker的简介与部署方法