Rust---复合数据类型之枚举、数组

目录

  • 枚举的使用
  • Option 枚举
  • 数组的使用
    • 输出结果

  • 枚举(Enum):表示一个类型可以有多个不同的取值。枚举类型可以包含不同的变体(variants),每个变体可以有不同的数据类型。

枚举的使用

enum Direction {Up,Down,Left,Right,
}fn move_player(direction: Direction) {match direction {Direction::Up => println!("Moving up"),Direction::Down => println!("Moving down"),Direction::Left => println!("Moving left"),Direction::Right => println!("Moving right"),}
}fn main() {let player_direction = Direction::Up;move_player(player_direction);
}

Option 枚举

  • OptionRust 标准库中的一个枚举,用于表示一个值可能存在,也可能不存在的情况。它有两个变体:Some(T) 表示值存在且包含具体的值 TNone 表示值不存在。
  • 如果使用 None 而不是 Some,需要告诉 Rust Option<T> 是什么类型的,因为编译器只通过 None 值无法推断出 Some 成员保存的值的类型。
  • 在对 Option<T> 进行 T 的运算之前必须将其转换为 T
  • Rust 的类型系统通过强制使用 Option<T> 来明确标识可能为空的值,帮助开发者更容易地避免空指针异常和空值错误,因此,只要一个值不是 Option<T> 类型,你就可以安全的认定它的值不为空。
fn divide(x: f64, y: f64) -> Option<f64> {if y == 0.0 {None} else {Some(x / y)}
}fn main() {let result = divide(10.0, 2.0);match result {Some(value) => println!("Result: {}", value),None => println!("Cannot divide by zero!"),}
}

数组的使用

fn main() {// 编译器自动推导出one的类型let one             = [1, 2, 3];// 显式类型标注let two: [u8; 3]    = [1, 2, 3];let blank1          = [0; 3];let blank2: [u8; 3] = [0; 3];// arrays是一个二维数组,其中每一个元素都是一个数组,元素类型是[u8; 3]let arrays: [[u8; 3]; 4]  = [one, two, blank1, blank2];// 借用arrays的元素用作循环中for a in &arrays {print!("{:?}: ", a);// 将a变成一个迭代器,用于循环// 你也可以直接用for n in a {}来进行循环for n in a.iter() {print!("\t{} + 10 = {}", n, n+10);}let mut sum = 0;// 0..a.len,是一个 Rust 的语法糖,其实就等于一个数组,元素是从0,1,2一直增加到到a.len-1for i in 0..a.len() {sum += a[i];}println!("\t({:?} = {})", a, sum);}
}

输出结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例&#xff08;python scikit-learn&#xff09;—多元线性回归(多角度实验分析) 这次实验&#xff0c;我们主要从以下几个方面介绍&#xff1a; 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验&#xff0c;数据标准化对比实验&#xff0…

Head First Design Patterns -代理模式

什么是代理模式 代理模式为另一个对象提供替身或者占位符&#xff0c;以便控制客户对对象的访问&#xff0c;管理访问的方式有很多种。例如远程代理、虚拟代理、保护代理等。 远程代理&#xff1a;管理客户和远程对象之间的交互。 虚拟代理&#xff1a;控制访问实例化开销大的对…

Docker实战教程 第3章 Dockerfile

4-2 通过dockerfile制作镜像 需求 制作一个具有ping ip ifconfig vim 这些命令工具的一个nginx镜像&#xff0c;通过dockerfile完成STEP1 : 写一个Dockerfile FROM nginx # 基于一个基础镜像 RUN lsstep2 docker build . -f 指定使用的dockerfile来生成镜像-t 指定镜像名…

算法基础--二分

&#x1f600;前言 二分查找是一种常见的算法技巧&#xff0c;通过不断缩小搜索范围&#xff0c;快速找到目标值的算法。在实际应用中&#xff0c;二分查找可以应用于有序数组中的查找、求上界、求下界等问题&#xff0c;具有较高的效率和广泛的应用价值。 &#x1f3e0;个人主…

pdf图片识别分类

文章目录 解析pdf数据ocr识别分类方法分类完提示 解析pdf数据 试了几种方法 fitz-get_image后面方法不适用&#xff0c;用pixmap分辨率低 用pypdf2版本低方法用不了 用pdf2image还要下依赖工具 用spire.pdf的SaveAsImage分辨率低&#xff0c;ExtractImages可以但运行慢 先用sp…

动手做一个最小Agent——TinyAgent!

Datawhale干货 作者&#xff1a;宋志学&#xff0c;Datawhale成员 前 言 大家好&#xff0c;我是不要葱姜蒜。在ChatGPT横空出世&#xff0c;夺走Bert的桂冠之后&#xff0c;大模型愈发地火热&#xff0c;国内各种模型层出不穷&#xff0c;史称“百模大战”。大模型的能力是毋…

非阻塞connect的正确使用方式

问题 在使用非阻塞connect时&#xff0c;发现在服务端没有运行时&#xff0c;连接成功&#xff0c;发现是对于connect返回为-1时&#xff0c;对错误码没有做正确的处理&#xff0c;只是对于errno为EINTR做了处理&#xff0c;其它错误码时使用select判断是否可写&#xff0c;可…

字符分类函数

字符分类函数 C语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头文件是 ctype.h 这些函数的使用方法非常类似&#xff0c;我们就讲解⼀个函数的事情&#xff0c;其他的非常类似&#xff1a; int i…

图的应用解析

01&#xff0e;任何一个无向连通图的最小生成树(B )。 A.有一棵或多棵 B.只有一棵 C.一定有多棵 D.可能不存在 02.用Prim算法和Kruskal算法构造图的最小生成树&#xff0c…

内存和网卡压力测试

1.内存压力测试 1.1测试目的 内存压力测试的目的是评估开发板中的内存子系统性能和稳定性&#xff0c;以确保它能够满足特定的应用需求。开发板通常用于嵌入式系统、物联网设备、嵌入式智能家居等场景&#xff0c;这些场景对内存的要求通常比较高。 其内存压力测试的主要目的…

开发板通过Ethernet(以太网口)与笔记本相连,并通过笔记本wifi连接手机热点来访问外网

文章目录 1、连接开发板与笔记本&#xff1a;2、配置笔记本的网络共享&#xff1a;3、配置开发板的网络设置&#xff1a;4、验证网络连接&#xff1a; 1、连接开发板与笔记本&#xff1a; 使用一根网线将开发板的Ethernet接口与笔记本的以太网口相连。 2、配置笔记本的网络共…

【深度学习】sdwebui的token_counter,update_token_counter,如何超出77个token的限制?对提示词加权的底层实现

文章目录 前言关于token_counter关于class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing)如何超出77个token的限制&#xff1f;对提示词加权的底层实现Overcoming the 77 token limit in diffusers方法1 手动拼方法2 compel 问询、帮助请看&#xff1a; 前言 …

Linux系统切割文件和合并文件介绍

split 和 cat 是 Linux 系统中用于文件切割和合并的命令。它们可以用于将大文件分割成多个小文件&#xff0c;或者将多个小文件合并成一个大文件。 1. split 命令用于将一个大文件切割成多个小文件。它的基本语法如下&#xff1a; split [-a num][-d][-l num][file][prefix] 其…

JS 数组方法 slice 和 splice 的区别

1. slice 概述 slice 方法用于提取数组中的一部分&#xff0c;返回提取结果&#xff0c;不会改变原数组 语法 array.slice(start, end)start 起始位置 end 可选参数&#xff0c;结束位置返回值: 起始位置到结束位置之间的数据&#xff0c;包含起始位置&#xff0c;但是不包含…

动规训练2

一、最小路径和 1、题目解析 就是一个人从左上往做下走&#xff0c;每次只能往右或者往下&#xff0c;求他到终点时&#xff0c;路径上数字和最小&#xff0c;返回最小值 2、算法原理 a状态表示方程 小技巧&#xff1a;经验题目要求 用一个二维数组表示&#xff0c;创建一个…

Flask Python:数据库多条件查询,flask中模型关联

前言 在上一篇Flask Python:模糊查询filter和filter_by&#xff0c;数据库多条件查询中&#xff0c;已经分享了几种常用的数据库操作&#xff0c;这次就来看看模型的关联关系是怎么定义的&#xff0c;先说基础的关联哈。在分享之前&#xff0c;先分享官方文档,点击查看 从文档…

蓝桥杯算法基础(36)动态规划dp经典问题详解

动态规划 -动态规划方法方法代表了这一类问题&#xff08;最优子结构or子问题最优性&#xff09;的有一半解法&#xff0c;是设计方法或者策略&#xff0c;不是具体算法 -本质是递推&#xff0c;核心是找到状态转移的方式&#xff0c;写出dp方程 -形式:记忆性递归递推01背包问题…

FreeRTOS中断管理以及实验

FreeRTOS中断管理以及实验 继续记录学习FreeRTOS的博客&#xff0c;参照正点原子FreeRTOS的视频。 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级&#xff0c;这个寄存器就是中断优先级配置寄存器 &#xff0c; STM32寄存器中并且这个寄存器只使用[7:4]&#xff0c…

Rust 中的字符串类型:`str` 和 `String`

Rust 中的字符串类型&#xff1a;&str 和 String 文章目录 Rust 中的字符串类型&#xff1a;&str 和 String1. &str&#xff1a;不可变的字符串引用2. String&#xff1a;可变的字符串3、字符串使用综合案例代码执行结果 在 Rust 编程语言中&#xff0c;有两种主要…

RTX RTOS 操作实例分析之---线程(thread)

0 Preface/Foreword 1 线程&#xff08;thread&#xff09; 1.1 线程定义 1.1.1 USE_BASIC_THREADS&#xff08;宏定义&#xff09; 经过以上步骤&#xff08;makefile包含&#xff09;&#xff0c;USE_BASIC_THREADS在编译阶段被定义到相应的模块中。 1.1.2 定义线程ID变量…