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

Rust: enum 和 i32 的区别和互换

在Rust编程语言中,enum(枚举)和i32是两种不同类型的数据结构,它们各自有不同的用途和特性。

i32

i32是一个32位的有符号整数类型。它用于存储整数值,范围从-2,147,483,648到2,147,483,647。i32是Rust中的基本数据类型之一,广泛用于需要整数运算的场景。

enum(枚举)

enum(枚举)是一种用户定义的类型,它允许你为一系列相关的值定义一个共同的类型。枚举中的每个值都是该类型的一个变体(variant)。枚举在Rust中非常强大,因为它们不仅可以表示简单的值集合,还可以包含数据(即所谓的“带数据的枚举”或“结构体枚举”)。

简单的枚举
enum Direction {North,South,East,West,
}

在这个例子中,Direction枚举有四个变体:NorthSouthEastWest。每个变体都不包含任何数据。

带数据的枚举
enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(i32, i32, i32), // RGB颜色值
}

在这个例子中,Message枚举有四个变体,其中三个变体包含数据:Move包含一个结构体(包含两个i32值),Write包含一个StringChangeColor包含三个i32值。

enumi32的转换

在Rust中,enumi32之间的转换不是自动的,因为它们是不同类型。如果你想要将一个enum值转换为一个i32值(或反之),你需要手动实现这种转换。

enumi32

你可以为每个枚举变体分配一个i32值,并编写一个函数来执行这种转换。但是,请注意,Rust标准库不提供内置的枚举到整数的映射。

enum Number {One = 1,Two = 2,Three = 3,
}impl Number {fn to_i32(&self) -> i32 {match self {Number::One => 1,Number::Two => 2,Number::Three => 3,}}
}

然而,上面的代码示例实际上并没有利用Rust的枚举表示法中的=来为变体分配值。在Rust中,你不能直接为枚举变体分配整数值(除了使用像#[repr(u32)]这样的属性,但这通常用于底层编程和与C语言的互操作性)。上面的to_i32函数是手动映射每个变体到一个整数值的示例。

正确的方法是使用#[repr(i32)]属性(或#[repr(u32)],取决于你的需求):

#[repr(i32)]
enum Number {One = 1,Two = 2,Three = 3,
}impl Number {fn as_i32(&self) -> i32 {*self as i32}
}

在这个例子中,Number枚举的变体被显式地映射到i32值,并且我们可以使用类型转换(as关键字)来从枚举值获取对应的i32值。

i32enum

类似地,你需要编写一个函数来根据i32值匹配并返回相应的枚举变体。这通常是通过match表达式来实现的。

impl From<i32> for Number {fn from(value: i32) -> Self {match value {1 => Number::One,2 => Number::Two,3 => Number::Three,_ => panic!("Unknown Number variant"),}}
}

在这个例子中,我们实现了From<i32> trait,它允许我们将i32值转换为Number枚举。如果i32值不匹配任何已知的变体,我们将触发一个panic。在实际应用中,你可能希望返回一个Option<Number>Result<Number, Error>来处理未知值。

相关文章:

Rust: enum 和 i32 的区别和互换

在Rust编程语言中&#xff0c;enum&#xff08;枚举&#xff09;和i32是两种不同类型的数据结构&#xff0c;它们各自有不同的用途和特性。 i32 i32是一个32位的有符号整数类型。它用于存储整数值&#xff0c;范围从-2,147,483,648到2,147,483,647。i32是Rust中的基本数据类型…...

2024年终回顾

前言 很久没有更新博客&#xff0c;因为工作内容主要是内场开发&#xff0c;后来有点和互联网脱轨&#xff0c;断断续续上来看一下。这个总结应该也很简单&#xff0c;涉及以下的几个内容进行逐一说明 一、就业问题 这个问题可能很尖锐&#xff0c;从大环境来说&#xff0c;去…...

RGB、HSV颜色模型及MATLAB互换应用实例

一、前言 RGB和HSV模型是数字图像处理中颜色空间中的两种重要表示方式&#xff0c;RGB和HSV都是描述颜色的数学模型&#xff0c;可以用于表示和处理图像中的颜色信息。 RGB模型是一种基于光的颜色模型&#xff0c;由红&#xff08;Red&#xff09;、绿&#xff08;Green&#x…...

# 【超全面了解鸿蒙生命周期】-生命周期补充

【超全面了解鸿蒙生命周期】-生命周期补充 鸿蒙所有的生命周期函数梳理 文章目录 【超全面了解鸿蒙生命周期】-生命周期补充前言一、AbilityStage的生命周期二、ExtensionAbility卡片生命周期三、Web组件常用生命周期 前言 本文是继之前写的生命周期函数梳理的进一步补充&…...

黑神话悟空游戏鼠标光标使用教程与下载

效果图&#xff1a; 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话&#xff1a;悟空》游戏中的角色和元素&#xff0c;具有以下特点&#xff1a; • 主题鲜明&#xff1a;光标设计紧扣游戏主题&#xff0c;采用了游戏中的元素&#xff0c;让玩家在使用电脑时也能感受到…...

【机器学习】梯度下降

文章目录 1. 梯度下降概念2. 梯度下降的技巧2.1 动态设置学习率2.2 Adagrad调整梯度2.3 随机梯度下降&#xff08;SGD&#xff09;2.4 特征缩放 3. 梯度下降理论基础 1. 梯度下降概念 梯度&#xff1a;Loss 对参数在某一点的偏微分&#xff0c;函数沿梯度的方向具有最大的变化…...

【leetcode 07】707.设计链表

要点⭐ 链表的常见操作 获取第n个节点的值 头部插入节点 尾部插入节点 第n个节点前插入&#xff08;先立新&#xff0c;在破旧&#xff09; 删除第n个节点 class ListNode{int val;ListNode next;ListNode(){};ListNode(int val){this.valval;} } class MyLinkedList {//链表大…...

【Spring】详解(上)

Spring 框架核心原理与应用&#xff08;上&#xff09; 一、Spring 框架概述 &#xff08;一&#xff09;诞生背景 随着 Java 应用程序规模的不断扩大以及复杂度的日益提升&#xff0c;传统的 Java开发方式在对象管理、代码耦合度等方面面临诸多挑战。例如&#xff0c;对象之…...

短视频矩阵系统后端源码搭建实战与技术详解,支持OEM

一、引言 随着短视频行业的蓬勃发展&#xff0c;短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑&#xff0c;负责处理复杂的业务逻辑、数据存储与交互&#xff0c;其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…...

力扣每日刷题

24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 递归写法 做题思路&#xff1a;把需要交换的两个数的前一个数作为参数传入&#xff0c;然后使用一个变量保存这两个变量的后一个数&#xff0c;交换这个两个数&#xff0c;最后把第二个数&#xff08;原第一…...

QT的信号和槽页面的应用

完善对话框&#xff0c;点击登录弹出对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…...

【Java】线程相关面试题 (基础)

文章目录 线程与进程区别并行与并发区别解析概念含义资源利用执行方式应用场景 创建线程线程状态如何保证新建的三个线程按顺序执行wait方法和sleep方法的不同所属类和使用场景方法签名和参数说明调用wait方法的前提条件被唤醒的方式与notify/notifyAll方法的协作使用示例注意事…...

【数字化】华为一体四面细化架构蓝图

导读&#xff1a;华为的“一体四面”企业架构设计方法是一种综合性的管理框架&#xff0c;它通过业务架构、信息架构、应用架构和技术架构的集成设计&#xff0c;构建出一个既符合业务需求&#xff0c;又具备高度灵活性和可扩展性的IT系统。这种架构设计方法强调从业务视角出发…...

frameworks 之 WMS添加窗口流程

frameworks 之 触摸事件窗口查找 1.获取WindowManager对象2.客户端添加view3. 服务端添加view (NO_SURFACE)4.重新布局 (DRAW_PENDING)4.1 创建 SurfaceControl 5.通知绘制 (COMMIT_DRAW_PENDING&#xff0c; READY_TO_SHOW&#xff0c; HAS_DRAWN)5. 1 布局测量和刷新 6.总结 …...

搜索方法归类全解析

搜索方法归类全解析 搜索方法是人工智能和计算机科学中用于解决问题、优化路径或发现数据模式的关键技术。根据不同的标准&#xff0c;搜索方法可以被分为多种类别。本文将详细介绍这些分类标准&#xff0c;并探讨每一类的特点及其代表算法&#xff0c;同时补充更多关于搜索的相…...

第1关:简易考试系统之用户注册

任务描述 本关任务&#xff1a;实现简易考试系统中新用户注册的功能。 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释&#xff0c;在 Begin-End 中实现简易考试系统中新用户注册的功能&#xff0c;具体要求如下&#xff1a; User.java 提供了用户的基本信息&#xff0c…...

VMware的三种网络模式——在NAT模式下开放接口为局域网内其他主机提供服务

众所周知 VMware 有三种常用的网络通讯模式&#xff0c;分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;&#xff0c;它们各有不同的用法。 Bridged 桥接模式是与主机…...

智慧地下采矿:可视化引领未来矿业管理

图扑智慧地下采矿可视化平台通过整合多源数据&#xff0c;提供实时 3D 矿井地图及分析&#xff0c;提升了矿产开采的安全性与效率&#xff0c;为矿业管理提供数据驱动的智能决策支持&#xff0c;推动行业数字化转型。...

流量主微信小程序工具类去水印

工具类微信小程序流量主带后台管理&#xff0c;可开通广告&#xff0c;带自有后台管理&#xff0c;不借助第三方接口 介绍 支持抖音&#xff0c;小红书&#xff0c;哔哩哔哩视频水印去除&#xff0c;功能实现不借助第三方平台。可实现微信小程序流量主广告变现功能&#xff0c…...

代码随想录算法【Day5】

DAY5 1.熟悉哈希表的数据结构&#xff1a;数组、map和set&#xff0c;使用方法、使用场景 2.哈希表应用场景&#xff1a;解决给你一个元素&#xff0c;判断它在集合里是否出现过。 242.有效的字母异位词 本题用数组解决的。 class Solution { public:bool isAnagram(strin…...

FISCO BCOS节点扩容实战指南:从原理到操作全解析

引言:为什么需要节点扩容? 在区块链网络运营过程中,“如何在不中断服务的情况下扩展网络处理能力?”“能否实现节点的平滑扩容与缩容?”“怎样确保新节点快速同步数据?”——这些问题困扰着许多区块链运维人员。FISCO BCOS作为金融级联盟链平台,提供了完善的节点扩容机…...

ITG3200陀螺仪驱动开发:寄存器配置、多量程切换与FreeRTOS集成

1. ITG3200陀螺仪驱动库技术解析与工程实践ITG3200是InvenSense公司于2009年前后推出的单芯片三轴数字陀螺仪传感器&#xff0c;采用MEMS工艺制造&#xff0c;集成16位ADC、数字温度传感器、可编程低通滤波器及IC/SPI双接口。尽管该器件已停产多年&#xff0c;但在工业控制、无…...

UMS3 Helper:ESP32-S3开发板硬件抽象库详解

1. UMS3 Helper 库概述UMS3 Helper 是为 Unexpected Maker 全系列 ESP32-S3 开发板量身定制的底层硬件抽象辅助库&#xff0c;覆盖 NanoS3、OMGS3、TinyS3、ProS3、FeatherS3 及 FeatherS3 Neo 六款主流型号。该库并非通用型驱动框架&#xff0c;而是深度耦合各板载外设物理布局…...

基于stm32的重工业园环境质量监测系统

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

【毫米波混合波束成形】第9章 多用户MIMO与干扰抑制的深度学习

目录 第一部分&#xff1a;原理详解 第9章 多用户干扰对齐与联合收发设计 9.1 多用户干扰对齐的网络求解 9.1.1 和速率最大化与最小用户速率公平性 9.1.1.1 加权最小均方误差&#xff08;WMMSE&#xff09;的展开 9.1.1.1.1 WMMSE迭代中接收波束与发射波束的交替更新层设计…...

突破硬件限制的游戏自由:Sunshine串流方案让低配设备玩转3A大作

突破硬件限制的游戏自由&#xff1a;Sunshine串流方案让低配设备玩转3A大作 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c…...

Packr 跨平台打包最佳实践:Windows、Linux、macOS 全攻略

Packr 跨平台打包最佳实践&#xff1a;Windows、Linux、macOS 全攻略 【免费下载链接】packr Packages your JAR, assets and a JVM for distribution on Windows, Linux and Mac OS X 项目地址: https://gitcode.com/gh_mirrors/pac/packr Packr 是一款强大的跨平台打包…...

深度解析TLS/SSL协议:工作原理、握手流程与网络安全应用

深度解析TLS/SSL协议&#xff1a;工作原理、握手流程与网络安全应用摘要一、TLS/SSL协议&#xff1a;基础定义1.1 TLS/SSL协议&#xff1a;是什么1.2 TLS/SSL协议&#xff1a;三大核心安全能力二、TLS/SSL协议&#xff1a;核心工作原理三、TLS/SSL协议&#xff1a;标准握手流程…...

南京道尔斯特机架式PDU重新定义工业级安全电源管理新范式

在数字化基建加速迭代、工业互联网深度渗透的现在&#xff0c;电力分配作为工业数字底座的关键枢纽&#xff0c;其安全性、可靠性与智能化水平​行业痛点凸显&#xff1a;传统电源方案难以适配工业高负载场景刚需​当前&#xff0c;随着GPU服务器、工业PLC、精密医疗设备等大功…...

告别命令行恐惧:用Git Bash图形化右键菜单,在Windows上轻松管理OpenHarmony代码

告别命令行恐惧&#xff1a;用Git Bash图形化右键菜单&#xff0c;在Windows上轻松管理OpenHarmony代码 对于许多Windows开发者来说&#xff0c;参与OpenHarmony这样的开源项目常常面临一个尴尬的困境&#xff1a;项目依赖Git进行版本控制&#xff0c;但传统的命令行操作方式让…...